"""Kleine Hilfsfunktionen ohne schwere Abhängigkeiten."""

import os
import re
import unicodedata


def mask_name_for_log(name: str) -> str:
    """Datenschutz im Log: Vorname voll, Nachname nur 1. Buchstabe + ***.

    Beispiel: 'Judit Üstün' → 'Judit Ü***'
              'Johann Karl Nestroy' → 'Johann Karl N***'
              'Einzel' → 'E***'
    """
    parts = str(name).strip().split()
    if not parts:
        return "***"
    if len(parts) == 1:
        return (parts[0][0] + "***") if parts[0] else "***"
    last = (parts[-1][0] + "***") if parts[-1] else "***"
    return " ".join(parts[:-1]) + " " + last


def mask_filename_for_log(path: str) -> str:
    """Datenschutz im Log: Namensteil im Rechnungs-Dateinamen durch *** ersetzen.

    Beispiel: 'Rechnung_2026-0005_JuditUestuen.pdf' → 'Rechnung_2026-0005_***.pdf'
    """
    base = os.path.basename(str(path))
    # Rechnung_YYYY-NNNN_Name.ext → Rechnung_YYYY-NNNN_***.ext
    masked = re.sub(r'^([^_]+_[^_]+)_[^.]+(\.[^.]+)?$', r'\1_***\2', base)
    return masked


def mask_iban(iban: str) -> str:
    """Maskiert eine IBAN für die Anzeige: erste 6 + letzte 4 Zeichen sichtbar, Rest *.

    Leerzeichen werden für die Anzeige beibehalten.
    """
    if not iban:
        return ""
    raw = iban.replace(" ", "")
    if len(raw) <= 10:
        return iban
    visible_start = raw[:6]
    visible_end   = raw[-4:]
    masked = visible_start + "*" * (len(raw) - 10) + visible_end
    return masked


def iban_valid(iban: str) -> bool:
    """Prüft die IBAN-Prüfsumme nach ISO 7064 MOD-97-10."""
    iban = iban.replace(" ", "").upper()
    if len(iban) < 15 or not iban[:2].isalpha() or not iban[2:4].isdigit():
        return False
    rearranged = iban[4:] + iban[:4]
    numeric = "".join(str(ord(c) - 55) if c.isalpha() else c for c in rearranged)
    return int(numeric) % 97 == 1


def vereinsname_to_from_email(vereinsname: str, domain: str = "energie-durchdacht.at") -> str:
    """Leitet aus dem Vereinsnamen eine Absender-E-Mail-Adresse ab.

    Beispiel: 'EEG Aschbach-Markt Zentrum' → 'EEG-Aschbach-Markt-Zentrum@energie-durchdacht.at'
    """
    n = vereinsname
    for k, v in [("ä","ae"),("ö","oe"),("ü","ue"),("Ä","Ae"),("Ö","Oe"),("Ü","Ue"),("ß","ss")]:
        n = n.replace(k, v)
    n = unicodedata.normalize("NFKD", n)
    n = "".join(c for c in n if not unicodedata.combining(c))
    n = re.sub(r"[^a-zA-Z0-9\-]", "-", n)
    n = re.sub(r"-+", "-", n).strip("-")
    local = n or "EEG"
    return f"{local}@{domain}"
