"""BAN YARO — KI Routes"""
from fastapi import APIRouter, Depends, HTTPException, Request
from pydantic import BaseModel
from typing import Optional
import ki as ki_module
from auth import get_current_user
from ratelimit import check as rl_check

router = APIRouter()


class TrainingRequest(BaseModel):
    problem: str
    rasse:   Optional[str] = None
    alter:   Optional[str] = None


@router.post("/training")
async def ki_training(req: TrainingRequest, request: Request,
                      user=Depends(get_current_user)):
    """KI-Trainingsberatung für individuelle Verhaltens- und Trainingsprobleme."""
    rl_check(request, max_requests=10, window_seconds=3600, key="ki_training")
    if not req.problem or len(req.problem.strip()) < 10:
        raise HTTPException(400, "Bitte beschreibe das Problem genauer.")
    if len(req.problem) > 1000:
        raise HTTPException(400, "Beschreibung zu lang (max. 1000 Zeichen).")

    rasse = req.rasse or "unbekannt"
    alter = req.alter or "unbekannt"

    system = (
        "Du bist ein erfahrener, zertifizierter Hundetrainer mit Schwerpunkt "
        "auf positiver Verstärkung und gewaltfreier Erziehung. "
        "Antworte immer auf Deutsch, konkret, verständlich und motivierend. "
        "Gib keine Ratschläge die Schmerz oder Zwang beinhalten. "
        "Wenn das Problem schwerwiegend ist (Aggression, starke Angst), "
        "empfehle professionellen Hundetrainer vor Ort zusätzlich."
    )

    prompt = f"""Hund: {rasse}, {alter} alt.

Problem: {req.problem.strip()}

Bitte gib:
1. Eine kurze Einschätzung des Problems (1-2 Sätze)
2. 3-5 konkrete Trainingsschritte die ich heute starten kann
3. Was ich vermeiden sollte
4. Wann ich einen Profi hinzuziehen sollte (falls relevant)

Schreibe klar und strukturiert, ohne unnötigen Fachjargon."""

    try:
        result = await ki_module.complete(
            prompt=prompt,
            system=system,
            max_tokens=600,
            requires_premium=False,
            user_id=user["id"],
        )
        return {"antwort": result}
    except ki_module.KIUnavailableError as e:
        raise HTTPException(503, str(e))
    except Exception as e:
        raise HTTPException(500, "KI momentan nicht verfügbar.")
