from __future__ import annotations

import os
from pathlib import Path

from dotenv import load_dotenv

load_dotenv(override=True)

BASE_DIR = Path(__file__).resolve().parent


def _split_scope(raw: str) -> list[str]:
    """Découpe la liste d'EPCI de EAU_EPCI_SCOPE.

    Séparateur "|" (et non ",") car certains noms d'EPCI contiennent
    déjà une virgule, ex. "CA de Béthune-Bruay, Artois-Lys Romane".
    """
    return [item.strip() for item in raw.split("|") if item.strip()]


class Config:
    # -----------------------------------------------------------------
    # Connexion PostgreSQL / PostGIS
    # Mêmes noms de variables que le POC foncier (PGHOST, PGDATABASE, ...)
    # pour pouvoir partager le même .env si les deux POC tapent sur la
    # même base.
    # -----------------------------------------------------------------
    DB_HOST = os.environ.get("PGHOST", "localhost")
    DB_PORT = int(os.environ.get("PGPORT", "5432"))
    DB_NAME = os.environ.get("PGDATABASE", "")
    DB_USER = os.environ.get("PGUSER", "")
    DB_PASSWORD = os.environ.get("PGPASSWORD", "")
    DB_SSLMODE = os.environ.get("PGSSLMODE", "disable")

    # -----------------------------------------------------------------
    # Schéma applicatif
    # -----------------------------------------------------------------
    SCHEMA = os.environ.get("EAU_SCHEMA", "eau_poc")

    # -----------------------------------------------------------------
    # Périmètre AULA pris en compte par défaut.
    # Avant : cette liste était recopiée en dur dans une quinzaine de
    # requêtes SQL réparties dans services/. Elle est maintenant définie
    # une seule fois ici (et pilotable depuis .env sans toucher au code).
    # -----------------------------------------------------------------
    EPCI_SCOPE = _split_scope(
        os.environ.get(
            "EAU_EPCI_SCOPE",
            "CA de Béthune-Bruay, Artois-Lys Romane|CC du Ternois|CC des Sept Vallées",
        )
    )

    # -----------------------------------------------------------------
    # Millésimes de référence utilisés par les indicateurs "état des lieux"
    # -----------------------------------------------------------------
    ANNEE_PRELEVEMENTS = int(os.environ.get("EAU_ANNEE_PRELEVEMENTS", "2023"))
    ANNEE_PRIX = os.environ.get("EAU_ANNEE_PRIX", "2024")

    @classmethod
    def pg_configured(cls) -> bool:
        return bool(cls.DB_NAME and cls.DB_USER)
