"""Data classes for IRM KMI integration"""
from datetime import datetime
from typing import List, TypedDict

from homeassistant.components.weather import Forecast


class IrmKmiForecast(Forecast):
    """Forecast class with additional attributes for IRM KMI"""

    # TODO: add condition_2 as well and evolution to match data from the API?
    text: str | None
    sunrise: str | None
    sunset: str | None


class IrmKmiRadarForecast(Forecast):
    """Forecast class to handle rain forecast from the IRM KMI rain radar"""
    rain_forecast_max: float
    rain_forecast_min: float
    might_rain: bool


class CurrentWeatherData(TypedDict, total=False):
    """Class to hold the currently observable weather at a given location"""
    condition: str | None
    temperature: float | None
    wind_speed: float | None
    wind_gust_speed: float | None
    wind_bearing: float | str | None
    uv_index: float | None
    pressure: float | None


class AnimationFrameData(TypedDict, total=False):
    """Holds one single frame of the radar camera, along with the timestamp of the frame"""
    time: datetime | None
    image: bytes | None
    value: float | None
    position: float | None
    position_higher: float | None
    position_lower: float | None


class RadarAnimationData(TypedDict, total=False):
    """Holds frames and additional data for the animation to be rendered"""
    sequence: List[AnimationFrameData] | None
    most_recent_image_idx: int | None
    hint: str | None
    unit: str | None
    location: bytes | None
    svg_still: bytes | None
    svg_animated: bytes | None


class WarningData(TypedDict, total=False):
    """Holds data about a specific warning"""
    slug: str
    id: int
    level: int
    friendly_name: str
    text: str
    starts_at: datetime
    ends_at: datetime


class ProcessedCoordinatorData(TypedDict, total=False):
    """Data class that will be exposed to the entities consuming data from an IrmKmiCoordinator"""
    current_weather: CurrentWeatherData
    hourly_forecast: List[Forecast] | None
    daily_forecast: List[IrmKmiForecast] | None
    radar_forecast: List[Forecast] | None
    animation: RadarAnimationData
    warnings: List[WarningData]
    pollen: dict
    country: str
