"""Laedt lokale KI-Modelle beim Start vor.

So zahlt nicht der erste Nutzer den Kaltstart (piper ~2 s Modell-Load, faster-whisper
Modell-Load). Es wird nur vorgeladen, was die aktive Konfiguration tatsaechlich nutzt
(Default-Provider) - bei reinen Cloud-Profilen passiert nichts. Best-effort: Fehler
werden geloggt, brechen den Start nie ab.
"""

import io
import logging
import wave

from app.config import settings

logger = logging.getLogger(__name__)


def _silence_wav(seconds: float = 0.1, rate: int = 16000) -> bytes:
    buf = io.BytesIO()
    with wave.open(buf, "wb") as w:
        w.setnchannels(1)
        w.setsampwidth(2)
        w.setframerate(rate)
        w.writeframes(b"\x00\x00" * int(rate * seconds))
    return buf.getvalue()


async def warmup_local_models() -> None:
    from app.dependencies import get_stt_provider, get_tts_provider

    try:
        tts = get_tts_provider()
        if type(tts).__name__ == "PiperTTSProvider":
            await tts.synthesize("Hallo.", audio_format="pcm")
            logger.info("warmup: piper-Stimmmodell geladen")
    except Exception:
        logger.exception("warmup: TTS-Vorladen fehlgeschlagen (ignoriert)")

    try:
        stt = get_stt_provider()
        if type(stt).__name__ == "FasterWhisperProvider":
            await stt.transcribe(_silence_wav(), fmt="wav", language=settings.default_language)
            logger.info("warmup: faster-whisper-Modell geladen")
    except Exception:
        logger.exception("warmup: STT-Vorladen fehlgeschlagen (ignoriert)")
