"""Provider-Layer: Fake-Umschaltung, harter Stopp ohne Rollen-Config, kein Fallback."""
import re
from pathlib import Path

import pytest

import agents


async def test_fake_umschaltung(fake_welt):
    fake_welt.antwort_auf(r"-schneiden-", lambda prompt: "ANTWORT")
    rc, out, err = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
    assert (rc, out) == (0, "ANTWORT")
    assert fake_welt.calls == ["scan-x-schneiden-1"]


async def test_stoerung_dann_fehler(fake_welt):
    fake_welt.antwort_auf(r".", lambda prompt: "ok")
    fake_welt.stoerungen.append({"muster": r"-schneiden-", "modus": "fehler", "mal": 1})
    rc1, _, err1 = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
    rc2, out2, _ = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
    assert (rc1, err1) == (1, "fake-stoerung")
    assert (rc2, out2) == (0, "ok")


async def test_infra_stoerung_wirft(fake_welt):
    fake_welt.stoerungen.append({"muster": r".", "modus": "infra", "mal": 1})
    with pytest.raises(agents.AgentInfraError):
        await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")


async def test_unkonfigurierte_rolle_pausiert(monkeypatch):
    """Ohne Fake-Modus und ohne ROLLE_-Env: AgentInfraError (Lauf pausiert), kein Default."""
    monkeypatch.delenv("PLANER_FAKE_AGENTS", raising=False)
    monkeypatch.delenv("ROLLE_JUDGE", raising=False)
    with pytest.raises(agents.AgentInfraError, match="kein Modell konfiguriert"):
        await agents.run_agent("scan-x-judge-1", "egal", 5, role="judge")


def test_kein_fallback_codepfad():
    """Der Creator-Fallback (_available_cached / 'routed provider unavailable') darf
    nicht mitportiert worden sein."""
    quelle = Path(agents.__file__).read_text(encoding="utf-8")
    assert "_available_cached" not in quelle
    assert not re.search(r"run_provider", quelle)


def test_prioritaet_der_stufen():
    assert agents._agent_priority("scan-p-sichten-1") < agents._agent_priority("scan-p-schneiden-9")
    assert agents._agent_priority("irgendwas") == len(agents._STAGE_PRIORITY)
