"""AC-5: alembic head is `0001_initial` and schema matches data_model.md § 2.

The migration is verified by inspecting the head revision and the upgrade
script's table/column declarations. We do NOT spin up Postgres here — that's
covered by integration tests; this is a Tier-1 unit check that the migration
metadata is correctly wired.
"""

from __future__ import annotations

import os
import re
from pathlib import Path

import pytest
from alembic import script as alembic_script
from alembic.config import Config

REPO_ROOT = Path(__file__).resolve().parents[2]
MIGRATION_BODY = (REPO_ROOT / "db" / "migrations" / "versions" / "0001_initial.py").read_text()


def test_head_revision_is_0001_initial() -> None:
    # Arrange
    cwd = os.getcwd()
    os.chdir(REPO_ROOT)
    try:
        cfg = Config(str(REPO_ROOT / "alembic.ini"))
        sc = alembic_script.ScriptDirectory.from_config(cfg)
        # Act
        heads = sc.get_heads()
    finally:
        os.chdir(cwd)

    # Assert
    assert list(heads) == ["0001_initial"], f"unexpected heads: {heads}"


@pytest.mark.parametrize(
    "table",
    [
        "tiles",
        "flights",
        "sector_classifications",
        "manifests",
        "engine_cache_entries",
    ],
)
def test_initial_migration_declares_table(table: str) -> None:
    # Assert — tolerate multi-line `op.create_table(\n    "<table>"` formatting.
    pattern = re.compile(
        r"create_table\(\s*['\"]" + re.escape(table) + r"['\"]",
        re.DOTALL,
    )
    assert pattern.search(MIGRATION_BODY), f"0001_initial.py missing create_table for `{table}`"


def test_tiles_table_has_canonical_source_check() -> None:
    """Canonical onboard-only additive columns from data_model.md § 2.1.1."""
    # Assert
    assert "googlemaps" in MIGRATION_BODY and "onboard_ingest" in MIGRATION_BODY, (
        "tiles.source CHECK constraint must allow ('googlemaps', 'onboard_ingest')"
    )
    assert "tile_quality_metadata" in MIGRATION_BODY, (
        "tiles must include the onboard-only `tile_quality_metadata` jsonb column"
    )
