from __future__ import annotations

from datetime import datetime

from anthropic import Anthropic

from .api_client import ApiClient
from .config import Settings
from .parsers import extract_case_id
from .storage import load_json, save_json


class AiAssistant:
    def __init__(self, settings: Settings, api: ApiClient):
        self.settings = settings
        self.api = api
        self.client = Anthropic(api_key=settings.anthropic_api_key) if settings.anthropic_api_key else None
        self.history_path = settings.data_dir / "conversations.json"

    def reply(self, user_id: str, message: str) -> str:
        if self.client is None:
            return "AI açarı qurulmayıb. ANTHROPIC_API_KEY dəyərini .env faylına əlavə edin."

        history = load_json(self.history_path, {})
        messages = history.get(user_id, [])
        context = self._case_context(message)
        full_message = f"{message}\n\n{context}" if context else message
        messages.append({"role": "user", "content": full_message})

        response = self.client.messages.create(
            model="claude-sonnet-4-5",
            max_tokens=3000,
            system=self._system_prompt(),
            messages=messages[-20:],
        )
        text = response.content[0].text

        messages[-1] = {"role": "user", "content": message}
        messages.append({"role": "assistant", "content": text})
        history[user_id] = messages[-20:]
        save_json(self.history_path, history)
        return text

    def _case_context(self, message: str) -> str:
        case_id = extract_case_id(message)
        if not case_id:
            return ""
        result = self.api.get("bir_is", {"id": case_id})
        if not result.get("success") or not result.get("data"):
            return ""
        item = result["data"]
        tasks = self.api.get("tapshiriqlar", {"is_id": case_id}).get("data", [])
        task_lines = "\n".join(
            f"- {task.get('basliq') or task.get('mezmun')}: {task.get('mezmun')} ({task.get('veziyyet')})"
            for task in tasks
        )
        return (
            f"İŞ MƏLUMATI\n"
            f"ID: {item.get('id')}\n"
            f"İş nömrəsi: {item.get('is_nomresi')}\n"
            f"Tərəf: {item.get('terefin_adi')}\n"
            f"Məhkəmə: {item.get('mehkemenin_adi')}\n"
            f"Hakim: {item.get('hakimin_adi')}\n"
            f"Status: {item.get('is_statusu')}\n"
            f"Tarix: {item.get('mehkeme_tarixi') or '-'}\n"
            f"Qeydlər: {item.get('qeydler') or '-'}\n"
            f"Tapşırıqlar:\n{task_lines or '-'}"
        )

    def _system_prompt(self) -> str:
        now = datetime.now().strftime("%d.%m.%Y %H:%M")
        return (
            f"Bu gün: {now}. Saat zonası: Bakı.\n\n"
            "Sən vəkil köməkçisi AI botsan. Azərbaycan dilində, dəqiq və praktik cavab ver.\n"
            "Hüquqi sənəd hazırlayanda istifadəçinin verdiyi iş məlumatlarından istifadə et.\n\n"
            "Əməliyyat niyyətlərini bu formatlarla bildir:\n"
            "[XATIRLATMA: DD.MM.YYYY HH:MM | mesaj]\n"
            "[EMAIL: alici@email.com | Mövzu | tam mətn]\n"
            "[IS_ELAVE: is_nomresi | terefin_adi | mehkemenin_adi | hakimin_adi | is_statusu | YYYY-MM-DD | qeydler]\n"
            "[IS_REDAKTE: id | is_nomresi | terefin_adi | mehkemenin_adi | hakimin_adi | is_statusu | YYYY-MM-DD | qeydler]\n"
            "[IS_TAP: iş nömrəsi]\n"
            "[IS_GOSTER: bugun/bu_hefte/hamisi]\n"
            "[IS_AXTAR: söz]\n"
            "[TASK_ELAVE: is_id | mezmun | prioritet(0/1/2/3; standart 0) | son_tarix YYYY-MM-DD | mesul | qeydler]\n"
            "[TASKS_GOSTER: is_id]\n"
            "[TASKS_ACIQ]"
        )
