"""Langfristige Aufzeichnung der 12V-Batteriespannung (Mein Audi -> Zustand
-> Batteriespannung antippen).

Eine über die Jahre absinkende Spannung deutet auf eine alternde Batterie hin
- dafür braucht es einen Verlauf, nicht nur den aktuellen Wert.

Ein Eintrag pro Tag ({datum, min, min_ts, max, max_ts}) reicht dafür und hält
die Datei auch über viele Jahre klein, selbst wenn der Sensor mehrfach pro
Stunde meldet (aktive Fahrt: Motor an/aus, Ladezustand des Alternators
wechselt laufend). Die Prüfung läuft deshalb alle 5 Minuten und trägt jede
Messung in den Tageseintrag ein; die Ablage erweitert dabei nur min/max samt
dem genauen Zeitstempel der jeweiligen Extremmessung - robust gegen Neustarts
und schwankende Erreichbarkeit.

Der Tagesminimalwert ist die für die Entladung aussagekräftige Größe: er fällt
typischerweise auf den Moment kurz nach dem Start, bevor der Alternator die
Ladespannung hochfährt - also am nächsten an die "echte" Ruhespannung heran,
ohne 2+ Stunden Standzeit abwarten zu müssen. Deshalb verwendet auch die
Ladezustands-/Gesundheitsauswertung im Frontend (AGM_RUHE_MAX_V) den
Tagesminimalwert, nicht den Maximalwert.

Es wird bewusst NICHT gefiltert, welche Messwerte gespeichert werden - min UND
max jedes Tages werden roh aufgezeichnet. Die AGM-Ruhespannungs-Grenze wird
erst beim Anzeigen angewendet: Tage, an denen selbst der Minimalwert über der
Grenze liegt (Fahrzeug nie im Ruhezustand beobachtet, z. B. bei einer sehr
langen Fahrt), tauchen dort nicht in der Statistik auf.

Ohne zugeordneten BATTERIE_SENSOR passiert hier bewusst nichts, statt
Platzhalter-Nullwerte aufzuzeichnen.
"""

from __future__ import annotations

import datetime
import logging
from typing import TYPE_CHECKING

from .veroeffentlichung import zustand_oder_none

if TYPE_CHECKING:
    from .koordinator import Koordinator

_LOGGER = logging.getLogger(__name__)


async def pruefen(k: Koordinator) -> None:
    sensor = k.zuordnung.werte.BATTERIE_SENSOR
    if not sensor:
        return
    wert = zustand_oder_none(k.hass, sensor)
    if wert is None:
        return
    try:
        spannung = float(wert)
    except (TypeError, ValueError):
        return

    jetzt = datetime.datetime.now(datetime.UTC)
    heute = datetime.date.today().isoformat()
    await k.ablage.batterieverlauf_tageswert_aktualisieren(
        heute, jetzt.isoformat(), spannung
    )
    await k.batterieverlauf_veroeffentlichen()
    _LOGGER.debug("Batteriespannung erfasst (%s: %s V)", heute, spannung)
