"""Wächter für Leitprinzip 2: Modell-IDs stehen NUR in der .env, nie im Code.

Greppt den gesamten backend-Quellcode (ohne tests/) nach Modell-ID-Mustern.
Schlägt dieser Test an, hat jemand ein Modell hart verdrahtet.
"""
import re
from pathlib import Path

BACKEND = Path(__file__).resolve().parent.parent
MUSTER = re.compile(r"claude-\w+-\d|MiniMax-M\d|\bopus\b|\bsonnet\b|\bhaiku\b|gpt-\d",
                    re.IGNORECASE)


def test_keine_modell_ids_im_code():
    treffer = []
    for pfad in BACKEND.rglob("*.py"):
        if "tests" in pfad.parts:
            continue
        for nr, zeile in enumerate(pfad.read_text(encoding="utf-8").splitlines(), 1):
            if MUSTER.search(zeile):
                treffer.append(f"{pfad.relative_to(BACKEND)}:{nr}: {zeile.strip()}")
    assert not treffer, "Modell-IDs im Code gefunden (gehören in die .env):\n" + "\n".join(treffer)


def test_keine_modell_ids_in_templates():
    templates = BACKEND / "templates"
    if not templates.is_dir():
        return
    treffer = [f"{p.name}:{nr}" for p in templates.rglob("*.md")
               for nr, zeile in enumerate(p.read_text(encoding="utf-8").splitlines(), 1)
               if MUSTER.search(zeile)]
    assert not treffer, f"Modell-IDs in Templates: {treffer}"
