"""
LLM Comparison - Pydantic Models und In-Memory Storage.
"""

from datetime import datetime, timezone
from typing import Optional
from pydantic import BaseModel, Field


class ComparisonRequest(BaseModel):
    """Request fuer LLM-Vergleich."""
    prompt: str = Field(..., description="User prompt (z.B. Lehrer-Frage)")
    system_prompt: Optional[str] = Field(None, description="Optionaler System Prompt")
    enable_openai: bool = Field(True, description="OpenAI/ChatGPT aktivieren")
    enable_claude: bool = Field(True, description="Claude aktivieren")
    enable_selfhosted_tavily: bool = Field(True, description="Self-hosted + Tavily aktivieren")
    enable_selfhosted_edusearch: bool = Field(True, description="Self-hosted + EduSearch aktivieren")

    # Parameter fuer Self-hosted Modelle
    selfhosted_model: str = Field("llama3.2:3b", description="Self-hosted Modell")
    temperature: float = Field(0.7, ge=0.0, le=2.0, description="Temperature")
    top_p: float = Field(0.9, ge=0.0, le=1.0, description="Top-p Sampling")
    max_tokens: int = Field(2048, ge=1, le=8192, description="Max Tokens")

    # Search Parameter
    search_results_count: int = Field(5, ge=1, le=20, description="Anzahl Suchergebnisse")
    edu_search_filters: Optional[dict] = Field(None, description="Filter fuer EduSearch")


class LLMResponse(BaseModel):
    """Antwort eines einzelnen LLM."""
    provider: str
    model: str
    response: str
    latency_ms: int
    tokens_used: Optional[int] = None
    search_results: Optional[list] = None
    error: Optional[str] = None
    timestamp: datetime = Field(default_factory=datetime.utcnow)


class ComparisonResponse(BaseModel):
    """Gesamt-Antwort des Vergleichs."""
    comparison_id: str
    prompt: str
    system_prompt: Optional[str]
    responses: list[LLMResponse]
    created_at: datetime = Field(default_factory=datetime.utcnow)


class SavedComparison(BaseModel):
    """Gespeicherter Vergleich fuer QA."""
    comparison_id: str
    prompt: str
    system_prompt: Optional[str]
    responses: list[LLMResponse]
    notes: Optional[str] = None
    rating: Optional[dict] = None  # {"openai": 4, "claude": 5, ...}
    created_at: datetime
    created_by: Optional[str] = None


# In-Memory Storage (in Production: Database)
_comparisons_store: dict[str, SavedComparison] = {}
_system_prompts_store: dict[str, dict] = {
    "default": {
        "id": "default",
        "name": "Standard Lehrer-Assistent",
        "prompt": """Du bist ein hilfreicher Assistent fuer Lehrkraefte in Deutschland.
Deine Aufgaben:
- Hilfe bei der Unterrichtsplanung
- Erklaerung von Fachinhalten
- Erstellung von Arbeitsblaettern und Pruefungen
- Beratung zu paedagogischen Methoden

Antworte immer auf Deutsch und beachte den deutschen Lehrplankontext.""",
        "created_at": datetime.now(timezone.utc).isoformat(),
    },
    "curriculum": {
        "id": "curriculum",
        "name": "Lehrplan-Experte",
        "prompt": """Du bist ein Experte fuer deutsche Lehrplaene und Bildungsstandards.
Du kennst:
- Lehrplaene aller 16 Bundeslaender
- KMK Bildungsstandards
- Kompetenzorientierung im deutschen Bildungssystem

Beziehe dich immer auf konkrete Lehrplanvorgaben wenn moeglich.""",
        "created_at": datetime.now(timezone.utc).isoformat(),
    },
    "worksheet": {
        "id": "worksheet",
        "name": "Arbeitsblatt-Generator",
        "prompt": """Du bist ein spezialisierter Assistent fuer die Erstellung von Arbeitsblaettern.
Erstelle didaktisch sinnvolle Aufgaben mit:
- Klaren Arbeitsanweisungen
- Differenzierungsmoeglichkeiten
- Loesungshinweisen

Format: Markdown mit klarer Struktur.""",
        "created_at": datetime.now(timezone.utc).isoformat(),
    },
}
