"""Konfiguration der manuellen Tabellen-Gruppen.

Diese Datei enthält die Definition der manuellen Tabellen-Gruppen,
die für die Tabellen-Expansion benötigt werden. Ausgelagert aus
gui/table_editor.py um zirkuläre Abhängigkeiten zu vermeiden.
"""
from __future__ import annotations

# Manuelle Tabellen-Gruppen: Platzhalter die zusammen eine Tabellenzeile bilden
MANUAL_TABLE_GROUPS: list[dict] = [
    {
        "id": "kpi",
        "title": "KPIs",
        "columns": ["KPI_Name", "KPI_Beschreibung", "KPI_Definition", "KPI_Berechnungslogik"],
        "headers": ["KPI-Name", "Beschreibung", "Fachliche Definition", "Berechnungslogik"],
    },
    {
        "id": "glossar",
        "title": "Glossar",
        "columns": ["GLOSSAR_Begriff", "GLOSSAR_Definition"],
        "headers": ["Begriff", "Definition"],
    },
    {
        "id": "param",
        "title": "Parameter & Funktionen",
        "columns": ["PARAM_Name", "PARAM_Beschreibung", "PARAM_Standardwert"],
        "headers": ["Name", "Beschreibung", "Standardwert"],
    },
    {
        "id": "refresh",
        "title": "Refresh & Aktualisierung",
        "columns": ["REFRESH_Typ", "REFRESH_Frequenz", "REFRESH_Uhrzeit", "REFRESH_Jobs"],
        "headers": ["Typ", "Frequenz", "Uhrzeit", "Abhängigkeiten"],
    },
    {
        "id": "changelog",
        "title": "Änderungsprotokoll",
        "columns": ["LOG_Version", "LOG_Datum", "LOG_Änderung", "LOG_AlterWert", "LOG_NeuerWert", "LOG_Typ", "LOG_Autor"],
        "headers": ["Version", "Datum", "Änderung", "Alter Wert", "Neuer Wert", "Typ", "Autor"],
    },
]


def get_manual_table_placeholder_names() -> set[str]:
    """Gibt alle Platzhalter-Namen zurück, die in manuellen Tabellen-Gruppen sind."""
    names: set[str] = set()
    for group in MANUAL_TABLE_GROUPS:
        names.update(group["columns"])
    return names


def find_group_for_placeholder(ph_name: str) -> dict | None:
    """Findet die Tabellen-Gruppe für einen Platzhalter."""
    for group in MANUAL_TABLE_GROUPS:
        if ph_name in group["columns"]:
            return group
    return None
