import os
import subprocess
import sys
from pathlib import Path

from app.core.config import get_settings

# `alembic check` a besoin d'`alembic.ini` et du répertoire courant qui rend `app` importable.
API_DIR = Path(__file__).resolve().parent.parent


def test_migrations_match_models() -> None:
    """`alembic check` en sous-process : l'autogénération ne propose rien sur `data_test`.

    Le sous-process est le point clé. Dans le process pytest, `conftest.py` importe `app.main`
    (donc les routers, donc les futurs `app/<module>/models.py`) : `Base.metadata` serait peuplé
    même pour un module absent du registre, et la comparaison rendrait un faux vert. La CLI
    Alembic, elle, n'importe que `app.db.models` — exactement ce que ce test doit garder honnête.
    Un modèle oublié dans le registre fait donc proposer un `DROP TABLE` ici, et le test échoue.

    La base est à `head` (fixture de session `_migrate_test_db`) et les options de comparaison
    sont celles d'`alembic/env.py` par construction.
    """
    result = subprocess.run(
        [sys.executable, "-m", "alembic", "check"],
        cwd=API_DIR,
        env={**os.environ, "DATABASE_URL": str(get_settings().database_url)},
        capture_output=True,
        text=True,
    )
    assert result.returncode == 0, (
        f"Modèles et migrations divergent (alembic check) :\n{result.stdout}\n{result.stderr}"
    )
