"""Dictée opt-in (R5 D5, ADR-004 §5) : off par défaut (aucune dépendance
audio requise), déterministe en CI/tests. Le vrai moteur (faster-whisper)
se vérifie en recette réelle (convention R5.1 — pas de mesure préalable
demandée par le référent, 22/07/2026)."""

import pytest

from siop_ai.config import charger_reglages
from siop_ai.transcription import TranscripteurDeterministe, construire_transcripteur


def test_off_par_defaut_ne_construit_rien():
    assert construire_transcripteur("off", "small") is None


def test_deterministe_stable_et_derive_la_taille():
    transcripteur = construire_transcripteur("deterministe", "small")
    assert isinstance(transcripteur, TranscripteurDeterministe)
    texte = transcripteur.transcrire(b"12345", "m4a")
    assert "5 octets" in texte
    assert ".m4a" in texte
    assert transcripteur.transcrire(b"12345", "m4a") == texte  # stable


def test_mode_inconnu_refuse_au_boot(monkeypatch):
    monkeypatch.setenv("AI_TRANSCRIPTION", "toujours")
    with pytest.raises(ValueError, match="AI_TRANSCRIPTION"):
        charger_reglages()


def test_modele_configurable(monkeypatch):
    monkeypatch.setenv("AI_TRANSCRIPTION", "deterministe")
    monkeypatch.setenv("AI_TRANSCRIPTION_MODEL", "medium")
    reglages = charger_reglages()
    assert reglages.ai_transcription == "deterministe"
    assert reglages.ai_transcription_model == "medium"
