# meteo/station_config.py
from __future__ import annotations

from dataclasses import dataclass
from typing import Tuple


@dataclass(frozen=True)
class SensorDefinition:
    """
    Décrit un capteur individuel de la station météo, tel qu'il est stocké dans InfluxDB.
    """

    name: str          # nom logique dans nos fichiers (ex: "temperature")
    measurement: str   # nom du measurement InfluxDB (ex: "°C")
    entity_id: str     # valeur du tag `entity_id` (ex: "station_meteo_bresser_exterieur_temperature")
    unit: str          # unité humaine (ex: "°C", "%", "hPa")


@dataclass(frozen=True)
class StationConfig:
    """
    Configuration complète de la station météo.

    Pour l'instant, c'est simplement une liste immuable de capteurs.
    """

    sensors: Tuple[SensorDefinition, ...]


def default_station_config() -> StationConfig:
    """
    Retourne la configuration par défaut de la station météo Bresser extérieure.

    Cette config est basée sur :
    - les measurements (°, °C, %, hPa, km/h, lx, mm/h)
    - les entity_id trouvés dans le bucket "weather".
    """
    sensors = (
        SensorDefinition(
            name="temperature",
            measurement="°C",
            entity_id="station_meteo_bresser_exterieur_temperature",
            unit="°C",
        ),
        SensorDefinition(
            name="humidity",
            measurement="%",
            entity_id="station_meteo_bresser_exterieur_humidite_relative",
            unit="%",
        ),
        SensorDefinition(
            name="pressure",
            measurement="hPa",
            entity_id="station_meteo_bresser_exterieur_pression_atmospherique",
            unit="hPa",
        ),
        SensorDefinition(
            name="illuminance",
            measurement="lx",
            entity_id="station_meteo_bresser_exterieur_luminance",
            unit="lx",
        ),
        SensorDefinition(
            name="wind_speed",
            measurement="km/h",
            entity_id="station_meteo_bresser_exterieur_vitesse_du_vent",
            unit="km/h",
        ),
        SensorDefinition(
            name="wind_direction",
            measurement="°",
            entity_id="station_meteo_bresser_exterieur_direction_du_vent",
            unit="°",
        ),
        SensorDefinition(
            name="rain_rate",
            measurement="mm/h",
            entity_id="station_meteo_bresser_exterieur_precipitations",
            unit="mm/h",
        ),
    )

    return StationConfig(sensors=sensors)
