"""Laufzeiteinstellungen von TESM."""

from __future__ import annotations

from tesm_core.settings_store import SettingSpec

from .services.kea import DEFAULT_CONFIG_PATH

TESM_SETTINGS: tuple[SettingSpec, ...] = (
    # -- Ueberwachung ------------------------------------------------------- #
    SettingSpec(
        "monitor_interval_seconds",
        300,
        "int",
        "Pruefintervall (Sekunden)",
        hint="Abstand zwischen zwei Erreichbarkeitspruefungen. Lizenzpflichtig.",
        section="monitoring",
        minimum=30,
        maximum=86400,
    ),
    SettingSpec(
        "monitor_failures_before_restart",
        2,
        "int",
        "Fehlversuche bis zum automatischen PoE-Neustart",
        hint="Erst nach so vielen aufeinanderfolgenden Fehlschlaegen wird geschaltet. "
        "Der Vorgaenger schaltete sofort beim ersten Ausfall.",
        section="monitoring",
        minimum=1,
        maximum=10,
    ),
    SettingSpec(
        "monitor_auto_restart",
        True,
        "bool",
        "Automatischen PoE-Neustart bei Ausfall aktivieren",
        section="monitoring",
    ),
    SettingSpec(
        "dashboard_public",
        True,
        "bool",
        "Statusuebersicht ohne Anmeldung erreichbar",
        hint="Zeigt ausschliesslich Name und Erreichbarkeit aktiver Geraete -- keine "
        "IP-Adressen, keine Switch-Zuordnung, keine Verwaltungsfunktionen.",
        section="monitoring",
    ),
    # -- DHCP --------------------------------------------------------------- #
    SettingSpec("dhcp_domain", "local", "str", "Domainname", section="dhcp"),
    SettingSpec(
        "dhcp_lease_default", 600, "int", "Lease-Dauer (Sekunden)", section="dhcp",
        minimum=60, maximum=604800,
    ),
    SettingSpec(
        "dhcp_lease_max", 7200, "int", "Maximale Lease-Dauer (Sekunden)", section="dhcp",
        minimum=60, maximum=604800,
    ),
    SettingSpec(
        "dhcp_output_path",
        DEFAULT_CONFIG_PATH,
        "str",
        "Zielpfad der Kea-Konfiguration",
        section="dhcp",
    ),
    # -- Dateifreigaben ----------------------------------------------------- #
    SettingSpec(
        "fileshare_mount_root",
        "/mnt/tesm-shares",
        "str",
        "Wurzelverzeichnis der Einbindungen",
        section="fileshare",
    ),
    SettingSpec(
        "fileshare_max_age_hours",
        12,
        "int",
        "Einbindungen automatisch loesen nach (Stunden)",
        section="fileshare",
        minimum=1,
        maximum=168,
    ),
    SettingSpec(
        "fileshare_upload_max_mb",
        512,
        "int",
        "Maximale Dateigroesse beim Hochladen (MB)",
        section="fileshare",
        minimum=1,
        maximum=8192,
    ),
    # -- Wartung ------------------------------------------------------------ #
    SettingSpec(
        "maintenance_command_timeout",
        900,
        "int",
        "Zeitlimit eines Wartungslaufs (Sekunden)",
        section="maintenance",
        minimum=60,
        maximum=7200,
    ),
    SettingSpec(
        "maintenance_reboot_wait",
        300,
        "int",
        "Wartezeit auf die Rueckkehr nach einem Neustart (Sekunden)",
        section="maintenance",
        minimum=30,
        maximum=1800,
    ),
    # -- Terminal ----------------------------------------------------------- #
    SettingSpec(
        "terminal_enabled",
        True,
        "bool",
        "Browser-Terminal fuer Switche aktiv",
        hint="Auch wenn aktiv: erfordert das Recht 'Ausfuehren' auf Switche, eine frische "
        "Passwortbestaetigung und wird vollstaendig protokolliert.",
        section="monitoring",
    ),
    SettingSpec(
        "terminal_idle_timeout",
        300,
        "int",
        "Terminal bei Untaetigkeit trennen nach (Sekunden)",
        section="monitoring",
        minimum=60,
        maximum=3600,
    ),
)
