"""Wahlperioden-Helper für die Auswertungen.

Maps a Drucksache-Datum + Bundesland auf eine Wahlperioden-Kennung.
Single Source of Truth ist ``BUNDESLAENDER[bl].wahlperiode_start`` —
alles vor diesem Datum gehört zur Vorgänger-WP, alles ab dem Datum zur
aktuellen.

Granularität: pro Bundesland kennen wir genau zwei WP — die laufende und
die direkt davor. Das reicht für die Aggregations-Sicht (#58), denn der
gesamte Antragsbestand stammt aus den letzten 5–10 Jahren. Sollte später
eine echte Multi-WP-Historie nötig werden, ist der Erweiterungspunkt
``_wp_calendar`` als Liste von ``(start, ende, wp_id)``-Tupeln pro BL.
"""
from __future__ import annotations

from typing import Optional

from .bundeslaender import BUNDESLAENDER


def wahlperiode_for(datum: str, bundesland: str) -> Optional[str]:
    """Liefert die Wahlperioden-Kennung für ein Datum + Bundesland.

    Format der Kennung: ``"<BL>-WP<n>"``, z.B. ``"NRW-WP18"``,
    ``"MV-WP7"`` (Vorgänger-WP). Returns ``None`` wenn das Bundesland
    unbekannt oder das Datum nicht parsbar ist.

    >>> wahlperiode_for("2026-03-18", "MV")
    'MV-WP8'
    >>> wahlperiode_for("2020-01-01", "MV")
    'MV-WP7'
    """
    bl = BUNDESLAENDER.get(bundesland)
    if bl is None:
        return None
    if not datum:
        return f"{bundesland}-WP{bl.wahlperiode}"  # default: aktuelle WP
    # ISO-Datum ist lexikographisch vergleichbar — keine datetime-Parsing
    # nötig, solange das Format YYYY-MM-DD eingehalten wird.
    if datum >= bl.wahlperiode_start:
        return f"{bundesland}-WP{bl.wahlperiode}"
    return f"{bundesland}-WP{bl.wahlperiode - 1}"


def all_wahlperioden() -> list[str]:
    """Liste aller bekannten Wahlperioden-Kennungen (aktuelle + Vorgänger
    pro Bundesland). Nützlich für UI-Filter-Dropdowns."""
    out: list[str] = []
    for code, bl in BUNDESLAENDER.items():
        out.append(f"{code}-WP{bl.wahlperiode}")
        out.append(f"{code}-WP{bl.wahlperiode - 1}")
    return out
