"""Le service n'est jamais public : sans le jeton de service, 401 partout
(la santé exceptée — sonde d'infra qui ne révèle rien)."""

from fastapi.testclient import TestClient

from siop_ai.app import app


def test_sante_publique_interne():
    reponse = _client_sans_db().get("/healthz")
    assert reponse.status_code == 200
    assert reponse.json()["service"] == "siop2-ai"


def test_endpoints_internes_refuses_sans_jeton():
    client = _client_sans_db()
    assert client.post("/internal/reindex").status_code == 401
    assert client.post("/internal/search", json={"question": "couple de serrage ?"}).status_code == 401


def test_question_trop_courte_rejetee_avant_tout():
    reponse = _client_sans_db().post(
        "/internal/search",
        json={"question": "ab"},
        headers={"X-Service-Token": "dev-only-ai-token"},
    )
    assert reponse.status_code == 422


def _client_sans_db() -> TestClient:
    """TestClient HORS gestionnaire de contexte : le lifespan (pool DB,
    modèle d'embeddings) ne tourne pas — on pose l'état minimal. Les tests
    d'intégration DB se font en local (recette), pas en CI (convention R5.1)."""
    from siop_ai.config import charger_reglages

    app.state.reglages = charger_reglages()
    return TestClient(app, raise_server_exceptions=False)
