"""Localisation des fichiers du projet.

Un unique point de vérité pour les chemins, afin que les parseurs, les tests et
les collecteurs ne fassent jamais d'hypothèse sur le répertoire courant.
"""

from __future__ import annotations

import os
from pathlib import Path

from dotenv import load_dotenv

# pipeline/chemins.py → pipeline/ → racine du dépôt
RACINE = Path(__file__).resolve().parent.parent

load_dotenv(RACINE / ".env")

# ── Corpus d'entrée — LECTURE SEULE ──────────────────────────────────────────
ENTREE = RACINE / "data" / "input"
RECHERCHE = ENTREE / "research"

RAPPORT_FINAL = ENTREE / "lois-france-2026-guadeloupe.agent.final.md"
RAPPORT_OUTLINE = ENTREE / "lois-france-2026-guadeloupe.agent.outline.md"
BIBLIOGRAPHIE = ENTREE / "lois-france-2026-guadeloupe_ref.md"

CROSS_VERIFICATION = RECHERCHE / "lois-2026_cross_verification.md"
INSIGHTS = RECHERCHE / "lois-2026_insight.md"
PHASE5_VALIDATION = RECHERCHE / "lois-2026_phase5_validation.md"


def chapitre(numero: int) -> Path:
    """Chemin d'un chapitre du rapport : `chapitre(10)` → `…_sec10.md`."""
    return ENTREE / f"lois-france-2026-guadeloupe_sec{numero:02d}.md"


def dimension(numero: int) -> Path:
    """Chemin d'un rapport de dimension : `dimension(7)` → `lois-2026_dim07.md`."""
    return RECHERCHE / f"lois-2026_dim{numero:02d}.md"


CHAPITRES = [chapitre(n) for n in range(11)]
DIMENSIONS = [dimension(n) for n in range(1, 13)]

# ── Sorties ──────────────────────────────────────────────────────────────────
DONNEES = RACINE / "data"
BASE_SQLITE = RACINE / os.environ.get("VEILLE_DB", "data/veille.db")
DUMP_JSON = DONNEES / "textes.json"
CACHE_HTTP = RACINE / os.environ.get("VEILLE_CACHE", "data/cache_http")

MIGRATIONS = Path(__file__).resolve().parent / "migrations"
CONFIG = Path(__file__).resolve().parent / "config.yaml"


def verifier_corpus() -> list[str]:
    """Retourne la liste des fichiers d'entrée attendus mais absents."""
    attendus = [
        RAPPORT_FINAL,
        BIBLIOGRAPHIE,
        CROSS_VERIFICATION,
        INSIGHTS,
        PHASE5_VALIDATION,
        *CHAPITRES,
        *DIMENSIONS,
    ]
    return [str(p.relative_to(RACINE)) for p in attendus if not p.exists()]
