# meteo/variables.py
from __future__ import annotations

from dataclasses import dataclass
from typing import Dict, List


@dataclass(frozen=True)
class Variable:
    """
    Décrit une variable météorologique exploitable dans les analyses.

    - key : identifiant interne (stable, sans espace)
    - column : nom de la colonne dans le DataFrame
    - label : libellé humain pour les graphiques
    - unit : unité d'affichage (texte libre)
    """

    key: str
    column: str
    label: str
    unit: str


VARIABLES: List[Variable] = [
    Variable(
        key="temperature",
        column="temperature",
        label="Température",
        unit="°C",
    ),
    Variable(
        key="humidity",
        column="humidity",
        label="Humidité relative",
        unit="%",
    ),
    Variable(
        key="pressure",
        column="pressure",
        label="Pression atmosphérique",
        unit="hPa",
    ),
    Variable(
        key="rain_rate",
        column="rain_rate",
        label="Précipitations",
        unit="mm/h",
    ),
    Variable(
        key="illuminance",
        column="illuminance",
        label="Luminance",
        unit="lx",
    ),
    Variable(
        key="wind_speed",
        column="wind_speed",
        label="Vitesse du vent",
        unit="km/h",
    ),
    Variable(
        key="wind_direction",
        column="wind_direction",
        label="Direction du vent",
        unit="°",
    ),
    Variable(
        key="sun_elevation",
        column="sun_elevation",
        label="Élévation solaire",
        unit="°",
    ),
]

VARIABLES_BY_KEY: Dict[str, Variable] = {v.key: v for v in VARIABLES}


def iter_variable_pairs() -> list[tuple[Variable, Variable]]:
    """
    Retourne la liste de toutes les paires (i, j) avec i < j, pour
    éviter les doublons et les diagonales.
    """
    pairs: list[tuple[Variable, Variable]] = []
    for i, vi in enumerate(VARIABLES):
        for vj in VARIABLES[i + 1 :]:
            pairs.append((vi, vj))
    return pairs
