#!/usr/bin/env python3
"""Live-Flotten-Banner für die SSH-Login-Message (MOTD).

Liest denselben Live-Status wie das Web-Dashboard, direkt aus den
gleichen Quellen (siehe app.py):
  - Online/Offline: get_device_status() parst dieselbe Check-Log-Datei
    (live.log) wie das Dashboard, statt selbst zu pingen -- ein Login
    soll niemals eine eigene Prüfung anstoßen.
  - DHCP: _detect_dhcp_status()/_dhcp_read_leases() lesen Dienststatus
    bzw. Kea-Lease-CSV direkt, kein eigener Zustand.

Eingebunden über /etc/update-motd.d/50-tesm, das dieses Skript per
venv/bin/python3 aufruft -- app.py importiert Flask u.a., die nur in
der venv installiert sind (dasselbe Muster wie generate_ips.py, das
poe.sh auf demselben Weg konsumiert).

Bewusst NICHT enthalten: PXE-Status. Anders als überwachen/booten/
DHCP ist PXE (noch) keine echte, mit Daten hinterlegte Funktion der
App (bislang nur Teil der Tagline) -- ein erfundener "PXE: idle"-Wert
wäre keine Live-Daten, sondern eine Behauptung.
"""
from app import _detect_dhcp_status, _dhcp_read_leases, get_db_connection, get_device_status

AMBER = "\033[38;2;226;166;60m"
DIM = "\033[2m"
BOLD = "\033[1m"
RESET = "\033[0m"


def _fleet_line(amber, dim, bold, reset):
    try:
        conn = get_db_connection()
        devices = conn.execute(
            "SELECT mac, name, is_active FROM devices WHERE deleted_at IS NULL"
        ).fetchall()
        conn.close()
        status, _, _, _ = get_device_status(devices)
        active = [d for d in devices if d["is_active"]]
        online = sum(1 for d in active if status.get(d["mac"]) == "online")
        down = len(active) - online
        return f"{bold}{online}{reset} Clients online · {bold}{down}{reset} down"
    except Exception:
        return f"{dim}Geräte-Status nicht verfügbar{reset}"


def _dhcp_line():
    try:
        dhcp = _detect_dhcp_status()
        if not dhcp["installed"]:
            return "nicht installiert"
        if not dhcp["active"]:
            return "installiert, gestoppt"
        leases = _dhcp_read_leases()
        return f"{len(leases)} Leases aktiv" if leases is not None else "läuft, keine Lease-Datei"
    except Exception:
        return "Status nicht verfügbar"


def main():
    # KEIN sys.stdout.isatty()-Check: dieses Skript schreibt beim Login
    # nicht direkt auf ein Terminal, sondern über run-parts in
    # /run/motd.dynamic (eine normale Datei -- isatty() wäre hier immer
    # False). Der eigentliche Betrachter ist trotzdem ein echtes Terminal
    # (die SSH-Session, der PAM den Inhalt danach ausgibt), daher immer
    # Farbe ausgeben.
    amber, dim, bold, reset = AMBER, DIM, BOLD, RESET

    print(f"{bold}{amber}TESM{reset} · TimEShepManager")
    print(f"{dim}überwachen · booten · anbinden (DHCP) · Betriebssystem geben (PXE){reset}")
    print()
    print(f"{_fleet_line(amber, dim, bold, reset)} · DHCP: {_dhcp_line()}")
    print()


if __name__ == "__main__":
    try:
        main()
    except Exception:
        # Ein MOTD-Banner darf einen SSH-Login niemals stören -- lieber
        # gar keine Ausgabe als ein Traceback vor dem Shell-Prompt.
        pass
