# scripts/describe_minutely_dataset.py
from __future__ import annotations

from pathlib import Path
import sys

import pandas as pd


PROJECT_ROOT = Path(__file__).resolve().parents[3]
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))

from meteo.dataset import load_raw_csv


CSV_PATH = Path("data/weather_minutely.csv")


def main() -> None:
    if not CSV_PATH.exists():
        print(f"⚠ Fichier introuvable : {CSV_PATH}")
        print("   Assurez-vous d'avoir généré le dataset minuté.")
        return

    df = load_raw_csv(CSV_PATH)
    print(f"Dataset minuté chargé : {CSV_PATH}")
    print(f"  Lignes   : {len(df)}")
    print(f"  Colonnes : {list(df.columns)}")
    print(f"  Période  : {df.index[0]} → {df.index[-1]}")
    print()

    # 1. Résumé statistique classique
    print("=== describe() ===")
    print(df.describe())
    print()

    # 2. Min / max par variable avec leurs dates
    print("=== Min / max avec dates ===")
    for col in df.columns:
        series = df[col]

        min_val = series.min()
        max_val = series.max()
        min_ts = series.idxmin()
        max_ts = series.idxmax()

        print(f"- {col}:")
        print(f"    min = {min_val} à {min_ts}")
        print(f"    max = {max_val} à {max_ts}")
    print()

    # 3. Vérification rapide de la continuité temporelle
    print("=== Vérification de la continuité temporelle ===")
    diffs = df.index.to_series().diff().dropna()
    counts = diffs.value_counts().sort_index()

    print("Différences d'intervalle (top 5):")
    print(counts.head())
    print()

    nb_not_60s = (diffs != pd.Timedelta(minutes=1)).sum()
    print(f"Nombre d'intervalles ≠ 60s : {nb_not_60s}")


if __name__ == "__main__":
    main()
