import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[2]


def source(path: str) -> str:
    return (ROOT / path).read_text(encoding="utf-8")


class AICustomerCreationTests(unittest.TestCase):
    def test_backend_supports_context_and_customer_creation_flow(self) -> None:
        ai_api = source("backend/app/api/ai.py")

        self.assertIn("context: list[dict] = Field(default_factory=list)", ai_api)
        self.assertIn("customer_id: Optional[int] = None", ai_api)
        self.assertIn("validate_customer_data", ai_api)
        self.assertIn("def _prepare_customer_payload", ai_api)
        self.assertIn('fallback_mobile = str(prepared.get("mobile") or "").strip()', ai_api)
        self.assertIn('"mobile": fallback_mobile or None', ai_api)
        self.assertIn("if not normalized_contacts and (fallback_name or fallback_email or fallback_phone or fallback_mobile)", ai_api)
        self.assertIn('draft_data.get("action") == "create_customer"', ai_api)
        self.assertIn('elif not draft_data.get("confirmed")', ai_api)
        self.assertIn('action = "confirm_create_customer"', ai_api)
        self.assertIn('return reply, "create_customer", customer.id', ai_api)

    def test_frontend_sends_context_and_uses_reply_field(self) -> None:
        ai_api = source("frontend/src/api/ai.js")
        chat_page = source("frontend/src/pages/AChatPage.vue")

        self.assertIn("chat: (message, context = []) => api.post('/ai/chat', { message, context })", ai_api)
        self.assertIn("function buildContext()", chat_page)
        self.assertIn("const context = buildContext()", chat_page)
        self.assertIn("await aiApi.chat(text, context)", chat_page)
        self.assertIn("res.reply || res.response || res.message", chat_page)
        self.assertIn("customerCreated", chat_page)
        self.assertIn("mobile", chat_page)
        self.assertIn("msg.kind === 'draft'", chat_page)


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