#!/bin/bash
# =============================================================
# SnowTV Player – Preseed Late Command Script
# Wird von preseed_sata.cfg / preseed_nvme.cfg aufgerufen.
# Läuft im Installer-Kontext nach der Debian-Basisinstallation.
# /target = installiertes System (gemountetes Root-FS)
# =============================================================

TARGET=/target
LOG=/tmp/preseed_late.log

log_info()  { echo "$(date)  INFO: $1" | tee -a "$LOG"; }
log_error() { echo "$(date) ERROR: $1" | tee -a "$LOG"; }

log_info "preseed_late.sh gestartet"

# --- 1. Temporäres NOPASSWD für die First-Boot-Installation ---
# Wird benötigt, damit swinstall.sh via sudo laufen kann ohne Passwort-Prompt.
# swinstall.sh überschreibt /etc/sudoers.d/snowtv am Ende mit der
# eingeschränkten Version (nur shutdown/reboot).
# snowtv-install wird zusätzlich hier explizit entfernt (siehe firstboot.sh).
cat > "${TARGET}/etc/sudoers.d/snowtv-install" << 'EOF'
snowtv ALL=(ALL) NOPASSWD: ALL
EOF
chmod 440 "${TARGET}/etc/sudoers.d/snowtv-install"
log_info "sudoers-install angelegt (temporär für First-Boot)"

# --- 2. Marker für den First-Boot-Service ---
# ConditionPathExists prüft diese Datei – wenn sie fehlt, startet der Service nicht.
touch "${TARGET}/var/lib/snowtv-install-pending"
log_info "Marker /var/lib/snowtv-install-pending angelegt"

# --- 3. First-Boot-Skript erstellen ---
# Läuft beim ersten Boot als User snowtv, lädt swinstall.sh und führt es aus.
cat > "${TARGET}/home/snowtv/firstboot.sh" << 'EOF'
#!/bin/bash
LOG="/var/log/stv-install.log"

echo "$(date)  INFO: SnowTV First Boot gestartet" | tee -a "$LOG"

# Neueste swinstall.sh vom Server laden
cd /home/snowtv
wget -q --no-check-certificate https://172.105.95.252/swinstall.sh -O /home/snowtv/swinstall.sh
if [ $? -ne 0 ]; then
    echo "$(date) ERROR: swinstall.sh Download fehlgeschlagen – Abbruch" | tee -a "$LOG"
    echo "$(date) ERROR: Manuell nachholen: wget --no-check-certificate https://172.105.95.252/swinstall.sh" | tee -a "$LOG"
    exit 1
fi
chmod +x /home/snowtv/swinstall.sh

# Marker und temporäre sudoers entfernen (Service soll nicht nochmals starten)
sudo rm -f /var/lib/snowtv-install-pending
sudo rm -f /etc/sudoers.d/snowtv-install

echo "$(date)  INFO: swinstall.sh wird ausgeführt" | tee -a "$LOG"
bash /home/snowtv/swinstall.sh 2>&1 | tee -a "$LOG"

# Hierher kommen wir nur wenn swinstall.sh NICHT rebooted hat (= Fehler)
echo "$(date) ERROR: swinstall.sh ohne Reboot beendet – manuelle Prüfung: cat /var/log/stv-install.log" | tee -a "$LOG"
EOF

chown snowtv:snowtv "${TARGET}/home/snowtv/firstboot.sh"
chmod +x "${TARGET}/home/snowtv/firstboot.sh"
log_info "firstboot.sh angelegt"

# --- 4. Systemd Service erstellen ---
cat > "${TARGET}/etc/systemd/system/snowtv-install.service" << 'EOF'
[Unit]
Description=SnowTV Player Erstinstallation
After=network-online.target
Wants=network-online.target
ConditionPathExists=/var/lib/snowtv-install-pending

[Service]
Type=oneshot
User=snowtv
Environment=HOME=/home/snowtv
WorkingDirectory=/home/snowtv
ExecStart=/bin/bash /home/snowtv/firstboot.sh
StandardOutput=journal+console
StandardError=journal+console
TimeoutStartSec=1800

[Install]
WantedBy=multi-user.target
EOF

# --- 5. Service aktivieren (Symlink, da kein laufendes systemd im Installer) ---
mkdir -p "${TARGET}/etc/systemd/system/multi-user.target.wants"
ln -sf /etc/systemd/system/snowtv-install.service \
       "${TARGET}/etc/systemd/system/multi-user.target.wants/snowtv-install.service"
log_info "snowtv-install.service aktiviert"

log_info "preseed_late.sh abgeschlossen – System startet neu und führt swinstall.sh aus"
