import unittest

from app.agents.personas import get_persona
from app.core.settings import get_settings
from app.modules.agents.application.llm_client import LLMClient


class TestAgentThuyRouting(unittest.TestCase):
    def test_settings_routing_override(self):
        settings = get_settings()
        self.assertIn("thuy", settings.agent_provider_routing)
        self.assertEqual(settings.agent_provider_routing["thuy"], "openrouter")

        self.assertIn("thuy", settings.agent_model_routing)
        self.assertEqual(
            settings.agent_model_routing["thuy"], "liquid/lfm-2.5-2.6b:free"
        )

    def test_llm_client_routing_override(self):
        settings = get_settings()
        old_openrouter_enabled = settings.openrouter_enabled
        old_openrouter_api_key = settings.openrouter_api_key
        settings.openrouter_enabled = True
        settings.openrouter_api_key = "test-api-key"

        try:
            client = LLMClient(settings)
            provider_info = client.get_provider_for_agent("thuy")
            self.assertEqual(provider_info["provider"], "openrouter")
            self.assertTrue(
                provider_info["model"]
                in [
                    "liquid/lfm-2.5-2.6b:free",
                    "nvidia/nemotron-3.5-lightning:free",
                    "stealth/ox-alpha",
                    "google/gemini-2.0-flash-exp:free",
                    "google/gemini-2.5-flash",
                ]
            )

        finally:
            settings.openrouter_enabled = old_openrouter_enabled
            settings.openrouter_api_key = old_openrouter_api_key

    def test_thuy_persona(self):
        persona = get_persona("thuy")
        self.assertEqual(persona["agent_code"], "thuy")
        self.assertEqual(persona["display_name"], "Thủy")
        self.assertIn("Trợ lý", persona["role_title"])
        self.assertIn("project_planning", persona["primary_capabilities"])
        self.assertIn("contract_management", persona["primary_capabilities"])
        self.assertIn("audit_inspection", persona["primary_capabilities"])


if __name__ == "__main__":
    unittest.main()
