"""Tests für das Audit-Logging der Admin-Aktionen."""

import logging

import pytest
from fastapi.testclient import TestClient

from app.main import app
from app.config import settings
from app.runtime_config import invalidate_cache

client = TestClient(app)
ADMIN = "test-admin-key"
ADM_HDR = {"X-Admin-Key": ADMIN}


@pytest.fixture(autouse=True)
def _setup(monkeypatch):
    monkeypatch.setattr(settings, "admin_api_key", ADMIN)
    monkeypatch.setattr(settings, "auth_enabled", False)
    invalidate_cache()
    yield
    invalidate_cache()


def test_config_set_is_audited(caplog):
    with caplog.at_level(logging.INFO, logger="va.audit"):
        r = client.put("/api/admin/config/local_llm_top_p",
                       json={"value": "0.7"}, headers=ADM_HDR)
    assert r.status_code == 200
    line = "\n".join(caplog.messages)
    assert "action=config_set" in line
    assert "local_llm_top_p" in line
    assert "user=admin-key" in line
    # aufräumen
    client.delete("/api/admin/config/local_llm_top_p", headers=ADM_HDR)


def test_backend_switch_rejection_is_audited(caplog):
    with caplog.at_level(logging.INFO, logger="va.audit"):
        r = client.post("/api/admin/llm/backend",
                        json={"backend": "boese"}, headers=ADM_HDR)
    assert r.status_code == 422
    assert "action=llm_backend_switch_rejected" in "\n".join(caplog.messages)
