"""Kategorie-Definitionen für die Vorlagendokumentation.

Definiert die Zuordnung von Platzhalter-Präfixen zu Hauptkategorien
(beschreibende_metadaten, backenddaten, frontenddaten) und deren
Unterkategorien.
"""
from __future__ import annotations


# ---------------------------------------------------------------------------
# Hauptkategorien mit Präfixen und Unterkategorien
# ---------------------------------------------------------------------------

CATEGORIES: dict[str, dict] = {
    "beschreibende_metadaten": {
        "prefixes": [
            "META_", "KONTAKT_", "BIZ_", "KPI_", "GLOSSAR_",
            "VER_", "LOG_", "REVIEW_",
        ],
        "subcategories": {
            "bericht_metadaten": ["META_"],
            "ansprechpartner": ["KONTAKT_"],
            "business_kontext": ["BIZ_"],
            "kpis_glossar": ["KPI_", "GLOSSAR_"],
            "versionierung": ["VER_", "LOG_"],
            "freigabe": ["REVIEW_"],
        },
    },
    "backenddaten": {
        "prefixes": [
            "DS_", "PQ_", "PQT_", "PARAM_", "COL_", "MODELL_",
            "DAX_", "TBLTYP_", "REL_", "RLS_", "SEC_", "REFRESH_",
            "OPS_", "ENDORSEMENT_", "DEP_",
        ],
        "subcategories": {
            "datenquellen": ["DS_"],
            "power_query": ["PQ_", "PQT_", "PARAM_", "COL_"],
            "datenmodell": ["MODELL_", "TBLTYP_", "REL_", "DEP_"],
            "measures": ["DAX_"],
            "sicherheit_rls": ["RLS_", "SEC_"],
            "betrieb_refresh": ["REFRESH_", "OPS_"],
            "endorsement": ["ENDORSEMENT_"],
        },
    },
    "frontenddaten": {
        "prefixes": ["MODELL_Visuals"],  # spezieller generierter Abschnitt
        "subcategories": {
            "visuals_seiten": [],
            "datenschnitte_filter": [],
            "interaktionen_drilldowns": [],
        },
    },
}


# ---------------------------------------------------------------------------
# Lookup-Funktionen
# ---------------------------------------------------------------------------

def get_category_for_prefix(prefix: str) -> str | None:
    """Bestimmt die Hauptkategorie für einen gegebenen Präfix.

    Prüft zunächst auf den speziellen Frontenddaten-Eintrag "MODELL_Visuals",
    dann auf reguläre Präfix-Zuordnungen.

    Args:
        prefix: Der Platzhalter-Präfix (z.B. "META_", "DS_") oder ein
                spezieller Bezeichner wie "MODELL_Visuals".

    Returns:
        Den Kategorie-Schlüssel (z.B. "beschreibende_metadaten") oder None,
        falls der Präfix keiner Kategorie zugeordnet ist.
    """
    for category_key, category_def in CATEGORIES.items():
        if prefix in category_def["prefixes"]:
            return category_key
    return None


def get_subcategory_for_prefix(prefix: str) -> str | None:
    """Bestimmt die Unterkategorie für einen gegebenen Präfix.

    Args:
        prefix: Der Platzhalter-Präfix (z.B. "META_", "PQ_") oder ein
                spezieller Bezeichner wie "MODELL_Visuals".

    Returns:
        Den Unterkategorie-Schlüssel (z.B. "bericht_metadaten", "power_query")
        oder None, falls der Präfix keiner Unterkategorie zugeordnet ist.
    """
    for category_def in CATEGORIES.values():
        for subcategory_key, subcategory_prefixes in category_def["subcategories"].items():
            if prefix in subcategory_prefixes:
                return subcategory_key
    return None
