#!/bin/bash
###############################################################
# GDS Display Setup
# Einmalig aufzurufen via set_mcid.sh (PANELTYPE=gds)
# Installiert: sagds, MIB, humidity.service
# Setzt Marker: /home/snowtv/bin/.gds_installed
# Umkehrung: uninstallgds.sh
###############################################################

if [ "$EUID" -ne 0 ]; then
    echo "Dieses Skript muss mit sudo ausgeführt werden."
    exit 1
fi

MARKER="/home/snowtv/bin/.gds_installed"
LOG="/var/log/stv.log"
BIN="/home/snowtv/bin"

if [ -f "$MARKER" ]; then
    echo "$(date)  INFO: GDS bereits installiert (Marker vorhanden). Abbruch." | tee -a "$LOG"
    exit 0
fi

echo "$(date)  INFO: GDS-Setup gestartet" | tee -a "$LOG"

# sagds vor apt entfernen (jeder Zustand), damit apt snmpd ungestört installieren kann
if dpkg -l gds-snmp-subagent-singlepanel 2>/dev/null | grep -qE '^[ih]'; then
    echo "$(date)  INFO: sagds temporär entfernen (für sauberes apt)" | tee -a "$LOG"
    dpkg --purge --force-remove-reinstreq gds-snmp-subagent-singlepanel 2>&1 | tee -a "$LOG" || true
fi

# Abhängigkeiten installieren (snmp-mibs-downloader + libx86-1 nicht in Standard-Repos, daher weglassen)
echo "$(date)  INFO: sagds-Abhängigkeiten werden installiert" | tee -a "$LOG"
DEBIAN_FRONTEND=noninteractive apt-get install -y \
    -o Dpkg::Options::="--force-confnew" \
    snmpd snmp libsnmp-base libusb-0.1-4 2>&1 | tee -a "$LOG"

# sagds deb-Paket installieren (--force-depends wegen snmp-mibs-downloader/libx86-1 nicht in Standard-Repos)
if ! dpkg -i --force-depends "${BIN}/gds-snmp-subagent-singlepanel_4.0.14_amd64.deb"; then
    echo "$(date)  ERROR: sagds Installation fehlgeschlagen" | tee -a "$LOG"
    exit 1
fi
echo "$(date)  INFO: sagds installiert" | tee -a "$LOG"

# MIB installieren
mkdir -p /usr/share/snmp/mibs
cp "${BIN}/GDS-SINGLE-DISPLAY-MIB-METRA-.mib" /usr/share/snmp/mibs/
echo "$(date)  INFO: MIB installiert" | tee -a "$LOG"

# humidity.service installieren und aktivieren
cp "${BIN}/humidity.service" /etc/systemd/system/
chmod 644 /etc/systemd/system/humidity.service
systemctl daemon-reload
systemctl enable humidity.service
systemctl start humidity.service
echo "$(date)  INFO: humidity.service installiert und gestartet" | tee -a "$LOG"

# Kompatibilitäts-Symlinks: sagds (v4.0.14) braucht libnetsnmp.so.30, Debian Trixie hat .so.40
ln -sf /usr/lib/x86_64-linux-gnu/libnetsnmp.so.40 /usr/lib/x86_64-linux-gnu/libnetsnmp.so.30
ln -sf /usr/lib/x86_64-linux-gnu/libnetsnmpagent.so.40 /usr/lib/x86_64-linux-gnu/libnetsnmpagent.so.30
echo "$(date)  INFO: libnetsnmp-Symlinks gesetzt" | tee -a "$LOG"

# snmpd.conf: AgentX-Master + SNMPv3-User für routine.py
systemctl stop snmpd 2>/dev/null || true
rm -f /var/lib/snmp/snmpd.conf
cat > /etc/snmp/snmpd.conf <<'EOF'
# AgentX master – sagds registriert GDS-OIDs als Subagent
master agentx

# SNMPv3 User für routine.py (Backlight/Humidity-Steuerung)
createUser admin_gds SHA "gds12345"
rwuser admin_gds
EOF
echo "$(date)  INFO: snmpd.conf geschrieben (master agentx + admin_gds)" | tee -a "$LOG"

# sagds.service: snmpd-Abhängigkeit sicherstellen (überschreibt dpkg-Version)
cat > /etc/systemd/system/sagds.service <<'EOF'
[Unit]
Description=GDS SNMP subagent
Wants=network-online.target
After=network-online.target snmpd.service
Requires=snmpd.service

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/sagds -f -M +/etc/snmp/sagds -m GDS-SINGLE-DISPLAY-MIB

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
echo "$(date)  INFO: sagds.service aktualisiert (After=snmpd.service)" | tee -a "$LOG"

# snmpd zuerst starten, dann sagds als Subagent registrieren
systemctl restart snmpd
sleep 3
systemctl restart sagds 2>/dev/null || systemctl start sagds 2>/dev/null || true
sleep 5

# Sanity-Check: GDS-OIDs via SNMP erreichbar?
if systemctl is-active --quiet sagds; then
    BKLS=$(snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds \
        localhost .1.3.6.1.4.1.33762.4.1.8.5.0 2>&1 || true)
    echo "$(date)  INFO: sagds aktiv – rwBklLampsStatus: $BKLS" | tee -a "$LOG"
else
    echo "$(date)  WARN: sagds nicht aktiv" | tee -a "$LOG"
fi

# timegds.json mit Zeiten aus mc.cfg initialisieren
"${BIN}/gdsairtime.sh"
echo "$(date)  INFO: timegds.json initialisiert" | tee -a "$LOG"

# Marker setzen
touch "$MARKER"
echo "$(date)  INFO: GDS-Setup abgeschlossen" | tee -a "$LOG"
