"""Mapping of CRM 'Modul' strings to internal fallgruppe codes."""

MODUL_TO_FALLGRUPPE: dict[str, str] = {
    "Zweitmeinung Onkologie": "onko",
    "Zweitmeinung Kardiologie": "kardio",
    "Zweitmeinung Intensiv": "intensiv",
    "Zweitmeinung Gallenblase": "galle",
    "Zweitmeinung Schilddrüse": "sd",
}

VALID_FALLGRUPPEN = {"onko", "kardio", "intensiv", "galle", "sd"}


def map_modul_to_fallgruppe(modul: str) -> str:
    """Map CRM Modul string to fallgruppe code.

    Handles exact matches and 'Begutachtung *' patterns.
    Raises ValueError for unmappable modules.
    """
    modul = modul.strip()
    if modul in MODUL_TO_FALLGRUPPE:
        return MODUL_TO_FALLGRUPPE[modul]

    modul_lower = modul.lower()
    # Handle "Begutachtung" variants — derive from keywords
    if "begutachtung" in modul_lower:
        keyword_map = [
            ("onko", "onko"),
            ("krebs", "onko"),
            ("tumor", "onko"),
            ("kardio", "kardio"),
            ("herz", "kardio"),
            ("intensiv", "intensiv"),
            ("galle", "galle"),
            ("schilddrüse", "sd"),
            ("schilddruese", "sd"),
        ]
        for keyword, gruppe in keyword_map:
            if keyword in modul_lower:
                return gruppe

    raise ValueError(f"Cannot map module to fallgruppe: '{modul}'")
