from __future__ import annotations

import unittest

from app.ws_gateway.fake_remote_agent import build_fake_remote_agent_response


CONTA_OPENING = (
    "Olá! Eu sou a Especialista em Contas e vou ajudar você a entender a sua "
    "fatura. Posso explicar valores, detalhar serviços e itens eventuais, "
    "identificar cobranças que você não reconhece e, se for o caso, realizar "
    "ajustes necessários ou solicitações relacionadas à sua conta. Então vamos "
    "lá, me conte o que você gostaria de entender ou resolver na sua conta."
)


class FakeRemoteAgentTests(unittest.TestCase):
    def test_conta_opening_uses_the_configured_greeting(self) -> None:
        response = build_fake_remote_agent_response(
            {
                "action": "chat",
                "payload": {"agent": "conta", "stage": "PRESENTATION"},
            }
        )

        self.assertEqual("ARGUMENTATION", response["stage"])
        self.assertEqual(CONTA_OPENING, response["result"]["content"])

    def test_conta_contract_returns_result_content(self) -> None:
        response = build_fake_remote_agent_response(
            {
                "action": "chat",
                "payload": {
                    "agent": "conta",
                    "stage": "PRESENTATION",
                    "message": "quero detalhes da fatura",
                    "msisdn": "5511999990000",
                },
            }
        )

        self.assertEqual("result", response["type"])
        self.assertEqual("ARGUMENTATION", response["stage"])
        self.assertEqual("final", response["result"]["type"])
        self.assertIn("fatura", response["result"]["content"].lower())
        self.assertIn("quero detalhes da fatura", response["result"]["content"].lower())

    def test_conta_done_when_user_asks_to_finish(self) -> None:
        response = build_fake_remote_agent_response(
            {
                "action": "chat",
                "payload": {
                    "agent": "conta",
                    "stage": "FORMALIZATION",
                    "message": "obrigado, pode encerrar",
                },
            }
        )

        self.assertEqual("DONE", response["stage"])
        self.assertEqual("result", response["type"])

    def test_generic_contract_returns_text(self) -> None:
        response = build_fake_remote_agent_response(
            {
                "agent": "oferta",
                "stage": "PRESENTATION",
                "text": "quero saber da oferta",
            }
        )

        self.assertEqual("final", response["type"])
        self.assertEqual("ARGUMENTATION", response["stage"])
        self.assertIn("oferta", response["text"].lower())
        self.assertIn("quero saber da oferta", response["text"].lower())


if __name__ == "__main__":
    unittest.main()
