import json

from app.schemas import AnalyzeRequest


def build_prompt(request: AnalyzeRequest) -> str:
    state_json = request.current_state.model_dump_json(indent=2)

    source_line = f"\nORIGEM DO EVENTO:\n{request.source}\n" if request.source else ""

    return f"""
Analisa esta conversa real de cliente B2B. A empresa vende carregadores EV AC / wallbox.

IMPORTANTE:
- A ÚLTIMA MENSAGEM DO CLIENTE é a mensagem principal a classificar.
- Usa o HISTÓRICO ANTERIOR apenas como contexto.
- Não trates mensagens anteriores da empresa como se fossem a ação final.
- Se a última mensagem é do cliente e contém pedido, pergunta, solicitação, dúvida ou confirmação, who_has_the_ball = empresa e conversation_state = a_aguardar_empresa.

{source_line}
ÚLTIMA MENSAGEM DO CLIENTE:
{request.last_customer_message}

HISTÓRICO ANTERIOR / CONTEXTO:
{request.previous_context}

ESTADO ATUAL CONHECIDO ANTES DA ÚLTIMA MENSAGEM:
{state_json}

Devolve JSON com estes campos:
{{
  "case_type": "",
  "intent": "",
  "product_interest": "",
  "conversation_state": "",
  "commercial_state": "",
  "relationship_state": "",
  "next_action": "",
  "who_has_the_ball": "",
  "urgency": "",
  "risk": "",
  "summary": "",
  "evidence": [],
  "confidence": 0.0
}}

Valores permitidos, usar exatamente estes valores:

case_type:
comercial, marketing, suporte, financeiro, outro

intent:
pedido_informacao, pedido_preco, pedido_contacto, pedido_proposta, pedido_orcamento, pedido_ajuste_proposta, followup_proposta, pedido_encomenda, pedido_proforma, pedido_fatura, confirmacao_adjudicacao, pedido_confirmacao_tecnica, comprovativo_pagamento, negociacao_preco, sem_interesse, remover_lista, suporte, resposta_ambigua, outro

conversation_state:
novo, a_aguardar_empresa, a_aguardar_cliente, resolvida, precisa_revisao

commercial_state:
novo_lead, interessado, qualificacao, proposta_pedida, proposta_enviada, negociacao, encomenda_pendente, proforma_pedida, pagamento_recebido, preparar_envio, cliente_ativo, sem_interesse, perdido, ganho, desconhecido

relationship_state:
novo_contacto, lead_existente, cliente_ativo, ex_cliente, desconhecido

who_has_the_ball:
empresa, cliente, ambos, desconhecido

urgency:
baixa, media, alta

risk:
baixo, medio, alto

Regras:
- Usa exatamente os valores permitidos. Não uses acentos, sinónimos ou variações.
- Para urgency usa "media", nunca "média".
- Para risk usa "medio", nunca "médio".
- next_action deve ser uma frase curta em português, nunca enum nem código.
- evidence deve conter frases curtas retiradas da conversa.
- summary deve ser curto e útil para o comercial.
- Não inventes informação.
- Responde apenas JSON válido, sem markdown.
""".strip()
