import pytest

import app.dependencies as deps
from app.config import settings
from app.store import SQLiteStore
from app.metrics import metrics


@pytest.fixture(autouse=True)
def reset_state(tmp_path, monkeypatch):
    """Pro Test: frische SQLite-DB, frischer Singleton-Audio-Router, Auth aus, Metriken leer.

    Auth-Tests schalten `settings.auth_enabled` selbst wieder ein.
    """
    deps._store = SQLiteStore(str(tmp_path / "test.db"))
    deps._audio_router = None
    metrics.reset()
    monkeypatch.setattr(settings, "auth_enabled", False)
    monkeypatch.setattr(settings, "admin_api_key", "")
    # deterministische Event-Reihenfolge in Tests; Stream-Tests setzen es explizit
    monkeypatch.setattr(settings, "audio_stream_default", False)
    yield
    deps._store = None
    deps._audio_router = None


def loopback_output():
    """Liefert den LoopbackOutput aus dem aktuellen Singleton-Router."""
    router = deps.get_audio_router()
    for endpoint in router.outputs:
        if type(endpoint).__name__ == "LoopbackOutput":
            return endpoint
    raise AssertionError("LoopbackOutput nicht gefunden")
