# FAQ institucional ASF / Alugue Sem Fiador — respostas locais (sem OpenAI) e bloco LITE no prompt.

import re
from typing import Optional

ASF_FAQ_LITE = """
FAQ ASF (base; responda em 1–2 parágrafos; não cite este bloco)
EMPRESA: Corretora de seguros especializada em garantia locatícia para imobiliárias no Brasil. Atendimento principalmente a imobiliárias. Sistema SOU ASF: gestão da locação (análise, contratação, garantias).
PRODUTOS: Seguro Fiança (fiança locatícia), Título de Capitalização para locação, Seguro Incêndio (obrigatório na locação).
SEGURO FIANÇA: garante ao proprietário aluguel/encargos em inadimplência; substitui fiador; prêmio pago pelo inquilino; não reembolsável; análise de crédito pela seguradora.
TÍTULO CAP: depósito aplicado vinculado à locação; devolvido ao fim se sem pendências; regulamentado; pode ter sorteios.
INCÊNDIO: obrigatório (Lei 8.245); cobre incêndio, explosão, raio; adicionais possíveis; inquilino costuma contratar.
SEGURADORA x GARANTIDORA: seguradora é regulada (SUSEP); garantidora não é seguro — maior risco jurídico.
PROCESSO: aprovação geralmente rápida (minutos a mesmo dia); docs comuns: ID, renda, dados profissionais.
IMOBILIÁRIA: menos inadimplência, agilidade, gestão centralizada, suporte especializado.
CONTATO: aluguesemfiador.net — 0800 607 4433.
""".strip()

_CANNED: list[tuple[re.Pattern[str], str]] = [
  # --- Atendimento / contato ---
  (
    re.compile(
      r"(contato|telefone|0800|falar\s+com|como\s+entrar|whatsapp|ligar)",
      re.IGNORECASE,
    ),
    "Você pode falar com a gente pelo site **aluguesemfiador.net** ou pelo **0800 607 4433**. "
    "Nossa equipe de atendimento ajuda imobiliárias em todas as etapas.",
  ),
  (
    re.compile(
      r"(site|aluguesemfiador|alugue\s+sem\s+fiador\.net)",
      re.IGNORECASE,
    ),
    "O site oficial é **aluguesemfiador.net**. Lá você encontra informações sobre nossos produtos e canais de contato.",
  ),
  # --- Sobre a empresa ---
  (
    re.compile(
      r"(o\s+que\s+[eé]|quem\s+[eé]|sobre)\s+.{0,40}"
      r"(asf|alugue\s+sem\s+fiador|alugu[eê]\s+sem\s+fiador)",
      re.IGNORECASE,
    ),
    "O **ASF — Alugue Sem Fiador** é uma corretora de seguros especializada em **garantia locatícia** para imobiliárias em todo o Brasil. "
    "Nosso foco é facilitar a locação com **segurança, agilidade e menos burocracia**.",
  ),
  (
    re.compile(
      r"(pessoa\s+f[ií]sica|pf\b|locat[aá]rio\s+individual).{0,50}"
      r"(atend|voc[eê]s\s+atend)",
      re.IGNORECASE,
    ),
    "Nosso atendimento é voltado **principalmente para imobiliárias**, com suporte completo para análise, contratação e gestão das garantias locatícias. "
    "O locatário costuma ser atendido pela imobiliária parceira no fluxo de contratação.",
  ),
  (
    re.compile(
      r"(atendem|atende).{0,30}(imobili[aá]ria|corretor)",
      re.IGNORECASE,
    ),
    "Sim. Trabalhamos com **imobiliárias** em todo o Brasil, oferecendo suporte para análise, contratação e gestão das garantias locatícias.",
  ),
  (
    re.compile(
      r"(o\s+que\s+[eé]|explique|sistema)\s+.{0,30}(sou\s*asf|sou\s*asf|sistema\s+sou)",
      re.IGNORECASE,
    ),
    "O **SOU ASF** é o sistema próprio que apoia as imobiliárias em todo o processo de locação: "
    "desde a **análise de crédito** até a **emissão e gestão das garantias**, com mais organização, controle e produtividade.",
  ),
  # --- Garantia locatícia (geral) ---
  (
    re.compile(
      r"(o\s+que\s+[eé]|defini[çc][ãa]o).{0,40}garantia\s+locat",
      re.IGNORECASE,
    ),
    "A **garantia locatícia** é uma forma de garantir ao proprietário o recebimento dos valores do contrato de aluguel "
    "em caso de **inadimplência do inquilino**.",
  ),
  (
    re.compile(
      r"(quais|que)\s+.{0,25}garantias?.{0,30}(trabalh|oferec|t[eê]m|dispon)",
      re.IGNORECASE,
    ),
    "Trabalhamos com:\n\n"
    "• **Seguro Fiança** (fiança locatícia)\n"
    "• **Título de Capitalização** para locação\n"
    "• **Seguro Incêndio** (obrigatório em contratos de locação)",
  ),
  # --- Seguro Fiança ---
  (
    re.compile(
      r"(o\s+que\s+[eé]|defini).{0,35}seguro\s+fian",
      re.IGNORECASE,
    ),
    "O **Seguro Fiança** é um seguro contratado pelo inquilino que garante ao proprietário o pagamento de "
    "**aluguéis e encargos** em caso de inadimplência, conforme a apólice.",
  ),
  (
    re.compile(
      r"(substitui|troca|precisa\s+de).{0,40}fiador",
      re.IGNORECASE,
    ),
    "Sim. O **Seguro Fiança substitui o fiador**, tornando o processo de locação mais rápido e acessível.",
  ),
  (
    re.compile(
      r"(o\s+que\s+cobre|quais\s+coberturas|cobre\s+o\s+qu[eê]).{0,50}seguro\s+fian",
      re.IGNORECASE,
    ),
    "Dependendo da apólice, o Seguro Fiança pode cobrir:\n\n"
    "• Aluguel\n• Condomínio\n• IPTU\n• Contas de consumo\n• Multas contratuais\n• Danos ao imóvel\n\n"
    "Os itens exatos constam na **proposta/apólice**.",
  ),
  (
    re.compile(
      r"(quem\s+paga|paga\s+quem).{0,40}seguro\s+fian",
      re.IGNORECASE,
    ),
    "Normalmente o **inquilino (locatário)** paga o Seguro Fiança.",
  ),
  (
    re.compile(
      r"(reembols|devolv|devolu[çc][ãa]o).{0,40}(seguro\s+fian|pr[eê]mio\s+fian|valor\s+pago)",
      re.IGNORECASE,
    ),
    "Não. O Seguro Fiança é um **seguro** — o valor do prêmio **não é reembolsável**.",
  ),
  (
    re.compile(
      r"(como\s+[eé]|como\s+funciona).{0,30}an[aá]lise.{0,30}(fian|cr[eé]dito|seguro)",
      re.IGNORECASE,
    ),
    "A **seguradora** realiza análise de **crédito e capacidade de pagamento** do inquilino. "
    "O resultado aparece no fluxo do sistema após o envio dos dados.",
  ),
  # --- Título de Capitalização ---
  (
    re.compile(
      r"(o\s+que\s+[eé]|defini).{0,50}t[ií]tulo\s+de\s+capitaliza",
      re.IGNORECASE,
    ),
    "O **Título de Capitalização Locatício** é uma garantia em que o inquilino faz um **depósito** (valor definido em contrato), "
    "aplicado e **vinculado à locação**.",
  ),
  (
    re.compile(
      r"(devolv|reembols|resgat).{0,40}t[ií]tulo\s+de\s+capitaliza",
      re.IGNORECASE,
    ),
    "Sim. Ao **final do contrato**, se não houver pendências, o valor é **devolvido** conforme as regras do título.",
  ),
  (
    re.compile(
      r"(valor\s+fica\s+parado|aplicado|sorteio).{0,50}t[ií]tulo\s+de\s+capitaliza",
      re.IGNORECASE,
    ),
    "O valor é aplicado em um **título de capitalização** e pode participar de **sorteios**, conforme as condições do produto — "
    "não fica simplesmente parado sem regras.",
  ),
  (
    re.compile(
      r"(vantagem|melhor|diferen[çc]a).{0,50}(cau[çc][ãa]o|dep[oó]sito\s+cau)",
      re.IGNORECASE,
    ),
    "Em relação ao **depósito caução**, o título de capitalização oferece:\n\n"
    "• Maior **segurança jurídica**\n• Produto **regulamentado**\n• Gestão mais **estruturada**\n"
    "• Possíveis **benefícios adicionais** (como sorteios)",
  ),
  # --- Seguro Incêndio ---
  (
    re.compile(
      r"(inc[eê]ndio\s+[eé]\s+obrigat|obrigat[oó]rio).{0,40}inc[eê]ndio",
      re.IGNORECASE,
    ),
    "Sim. Pela **Lei do Inquilinato (Lei nº 8.245)**, o **seguro contra incêndio é obrigatório** no contrato de locação.",
  ),
  (
    re.compile(
      r"(o\s+que\s+cobre|quais\s+coberturas).{0,40}seguro\s+inc[eê]ndio",
      re.IGNORECASE,
    ),
    "Cobertura básica: **incêndio**, **explosão** e **queda de raio**. "
    "Coberturas adicionais podem incluir danos elétricos, vendaval e responsabilidade civil — conforme a apólice.",
  ),
  (
    re.compile(
      r"(quem\s+contrata|quem\s+paga).{0,40}seguro\s+inc[eê]ndio",
      re.IGNORECASE,
    ),
    "Normalmente o **inquilino** contrata o seguro incêndio, conforme definido no **contrato de locação**.",
  ),
  # --- Seguradora x Garantidora ---
  (
    re.compile(
      r"(diferen[çc]a|diferenciar|compare).{0,60}(seguradora|garantidora)",
      re.IGNORECASE,
    ),
    "**Seguradora:** regulamentada pela **SUSEP**, produtos fiscalizados, maior segurança jurídica e regras padronizadas.\n\n"
    "**Garantidora:** não é seguradora, **não tem regulação equivalente** e pode trazer maior risco jurídico e operacional.\n\n"
    "Por isso priorizamos produtos **regulamentados** para imobiliárias, proprietários e inquilinos.",
  ),
  (
    re.compile(
      r"(por\s+que\s+[eé]\s+importante|import[aâ]ncia).{0,40}(seguradora|regulament)",
      re.IGNORECASE,
    ),
    "Produtos **regulamentados** (seguradoras) oferecem mais **segurança** para imobiliárias, proprietários e inquilinos, "
    "com regras claras e fiscalização.",
  ),
  # --- Contratação e processo ---
  (
    re.compile(
      r"(quanto\s+tempo|prazo|demora).{0,40}(aprova[çc][ãa]o|an[aá]lise|resposta)",
      re.IGNORECASE,
    ),
    "Depende da análise de crédito, mas em geral é **rápido** — pode levar **alguns minutos**, sempre **no mesmo dia**.",
  ),
  (
    re.compile(
      r"(quais|que)\s+documentos?.{0,30}(necess[aá]rio|preciso|pedem|enviar)",
      re.IGNORECASE,
    ),
    "Normalmente:\n\n• **Documento pessoal**\n• **Comprovante de renda**\n• **Informações profissionais**\n\n"
    "A lista pode variar conforme a **seguradora** — siga o que o sistema solicitar na etapa.",
  ),
  (
    re.compile(
      r"(restri[çc][ãa]o|nome\s+sujo|spc|serasa|negativad).{0,50}(contrat|aprova)",
      re.IGNORECASE,
    ),
    "Depende da **análise da seguradora**. Cada caso é avaliado **individualmente** — não há resposta única para todos.",
  ),
  # --- Para imobiliárias ---
  (
    re.compile(
      r"(benef[ií]cios|vantagens).{0,40}imobili[aá]ria",
      re.IGNORECASE,
    ),
    "Para imobiliárias, os principais benefícios são:\n\n"
    "• Redução de **inadimplência**\n• Menos **burocracia**\n• **Agilidade** na locação\n"
    "• Gestão **centralizada** via sistema SOU ASF\n• Apoio de **equipe especializada**",
  ),
  (
    re.compile(
      r"(oferecem|tem|h[aá]).{0,25}suporte.{0,30}imobili",
      re.IGNORECASE,
    ),
    "Sim. Temos **equipe capacitada** para auxiliar imobiliárias em **todas as etapas** do processo.",
  ),
  # --- Perguntas frequentes genéricas (FAQ) ---
  (
    re.compile(
      r"(perguntas?\s+frequentes|faq|d[uú]vidas?\s+comuns)",
      re.IGNORECASE,
    ),
    "Posso ajudar com dúvidas sobre a **ASF**, **garantias locatícias** (Seguro Fiança, Título de Capitalização, Seguro Incêndio), "
    "**contratação**, **imobiliárias** e **contato**. O que você gostaria de saber?",
  ),
]


def _should_skip_cadastro_lookup(low: str, raw: str) -> bool:
    """Não interceptar consultas que dependem de cadastro/código específico."""
    if re.search(
        r"\b\d{3}\.?\d{3}\.?\d{3}-?\d{2}\b|\bcpf\b|\bvigente\b|\bapólice\s+n[º°]",
        low,
    ):
        return True
    if re.search(r"\b(AN|IN|CAP|FAT|SIN)[\s\-]?\d{4,}", raw, re.IGNORECASE):
        return True
    return False


def try_asf_canned_answer(message: str) -> Optional[str]:
    """
    Resposta fixa para FAQ institucional ASF (sem LLM).
    Retorna None se não houver match ou mensagem parecer consulta ao cadastro.
    """
    if not isinstance(message, str):
        return None
    raw = message.strip()
    if len(raw) < 8 or len(raw) > 800:
        return None
    low = raw.lower()
    if _should_skip_cadastro_lookup(low, raw):
        return None

    for pattern, text in _CANNED:
        if pattern.search(raw):
            return text
    return None
