#!/bin/sh
set -e

# Geraetespezifische Werte (u. a. Admin-Benutzer) einlesen
ADMIN_USER="admin"
if [ -r /etc/qrk-kiosk/device.conf ]; then
    # shellcheck disable=SC1091
    . /etc/qrk-kiosk/device.conf
    ADMIN_USER="${ADMIN_USER:-admin}"
fi

# Benutzer anlegen, falls noch nicht vorhanden (idempotent).
create_user() {
    name="$1"
    if ! getent passwd "$name" >/dev/null; then
        adduser --disabled-password --gecos "" "$name"
    fi
}

case "$1" in
    configure)
        # Kiosk-Benutzer (kein sudo)
        create_user kassa
        adduser kassa lp >/dev/null 2>&1 || true
        # kassa darf sich am Greeter OHNE Passwort anmelden (Kiosk neu starten)
        getent group nopasswdlogin >/dev/null || addgroup --system nopasswdlogin 2>/dev/null || true
        adduser kassa nopasswdlogin >/dev/null 2>&1 || true
        # Debian: nopasswdlogin-PAM-Regel aktivieren (standardmaessig auskommentiert)
        if [ -f /etc/pam.d/sddm ]; then
            sed -i 's|^[[:space:]]*#[[:space:]]*\(auth[[:space:]].*nopasswdlogin.*\)|\1|' \
                /etc/pam.d/sddm 2>/dev/null || true
        fi

        # Admin-Benutzer (sudo) - vorhandenen (z. B. 'chris') wiederverwenden
        create_user "$ADMIN_USER"
        adduser "$ADMIN_USER" sudo >/dev/null 2>&1 || true

        # Per-User-Konfiguration fuer den Kiosk-Benutzer
        if getent passwd kassa >/dev/null; then
            install -d -o kassa -g kassa /home/kassa/.config/touchegg
            if [ ! -e /home/kassa/.config/touchegg/touchegg.conf ]; then
                cp /usr/share/qrk-kiosk/touchegg.conf \
                   /home/kassa/.config/touchegg/touchegg.conf
                chown kassa:kassa /home/kassa/.config/touchegg/touchegg.conf
            fi
            # Openbox ohne Desktop-Chrome, nur Admin-Ausstieg (Menue + Strg+Alt+Q)
            install -d -o kassa -g kassa /home/kassa/.config/openbox
            if [ ! -e /home/kassa/.config/openbox/rc.xml ]; then
                cp /usr/share/qrk-kiosk/openbox/rc.xml \
                   /home/kassa/.config/openbox/rc.xml
                cp /usr/share/qrk-kiosk/openbox/menu.xml \
                   /home/kassa/.config/openbox/menu.xml
                chown -R kassa:kassa /home/kassa/.config/openbox
            fi
            # kassa bekommt IMMER die Kiosk-Session, auch bei manuellem Login
            printf '[Desktop]\nSession=qrk-kiosk\n' > /home/kassa/.dmrc
            chown kassa:kassa /home/kassa/.dmrc
        fi

        # Admin: Standard-Session = Plasma (X11)
        if getent passwd "$ADMIN_USER" >/dev/null; then
            ahome="$(getent passwd "$ADMIN_USER" | cut -d: -f6)"
            printf '[Desktop]\nSession=plasmax11\n' > "$ahome/.dmrc"
            chown "$ADMIN_USER" "$ahome/.dmrc"

            # KDE-Session-Restore ausschalten: sonst startet KDE beim Login
            # alte Apps wieder (z. B. qrkcustomerdisplay OHNE -s 1 -> Screen 0)
            install -d -o "$ADMIN_USER" -g "$ADMIN_USER" "$ahome/.config"
            printf '[General]\nloginMode=emptySession\n' > "$ahome/.config/ksmserverrc"
            chown "$ADMIN_USER" "$ahome/.config/ksmserverrc"
        fi

        # SDDM-Greeter: feste Vorauswahl auf Admin + Plasma (X11)
        install -d -m 755 /var/lib/sddm
        {
            echo "[Last]"
            echo "User=$ADMIN_USER"
            echo "Session=/usr/share/xsessions/plasmax11.desktop"
        } > /var/lib/sddm/state.conf

        # qrkcustomerdisplay-Autostart deaktivieren (die Kiosk-Session startet es
        # selbst; in der Admin-Session soll kein Kundendisplay aufgehen)
        _cd=" /etc/xdg/autostart/qrkcustomerdisplay-autostart.desktop"
        if [ -f "$_cd" ]; then
            sed -i '/^Hidden=/d' "$_cd" 2>/dev/null || true
            echo 'Hidden=true' >> "$_cd"
        fi

        # SSH-Public-Keys fuer den Admin einrichten (Paket + geraetespezifisch)
        if getent passwd "$ADMIN_USER" >/dev/null; then
            admin_home="$(getent passwd "$ADMIN_USER" | cut -d: -f6)"
            admin_group="$(id -gn "$ADMIN_USER" 2>/dev/null || echo "$ADMIN_USER")"
            install -d -m 700 -o "$ADMIN_USER" -g "$admin_group" "$admin_home/.ssh"
            tmpfile="$(mktemp)"
            if [ -s /usr/share/qrk-kiosk/authorized_keys ]; then
                grep -vE '^[[:space:]]*(#|$)' \
                    /usr/share/qrk-kiosk/authorized_keys >>"$tmpfile" 2>/dev/null || true
            fi
            if [ -d /etc/qrk-kiosk/authorized_keys.d ]; then
                cat /etc/qrk-kiosk/authorized_keys.d/* 2>/dev/null >>"$tmpfile" || true
            fi
            if [ -s "$tmpfile" ]; then
                install -m 600 -o "$ADMIN_USER" -g "$admin_group" "$tmpfile" \
                    "$admin_home/.ssh/authorized_keys"
            fi
            rm -f "$tmpfile"
        fi

        # AllowUsers dynamisch aus dem Admin-Namen erzeugen
        install -d -m 755 /etc/ssh/sshd_config.d
        {
            echo "# Von qrk-kiosk erzeugt - nur der Admin darf sich per SSH anmelden."
            printf 'AllowUsers %s\n' "$ADMIN_USER"
        } > /etc/ssh/sshd_config.d/20-admin.conf
        chmod 644 /etc/ssh/sshd_config.d/20-admin.conf

        # root-Login sperren (Passwort ungueltig machen)
        passwd -l root >/dev/null 2>&1 || true

        # QRK-/AnyDesk-Installation anstossen. Bewusst ueber systemd (oneshot),
        # damit der apt-/dpkg-Lock dieses Vorgangs nicht blockiert wird.
        systemctl --no-block start kiosk-bootstrap.service 2>/dev/null || true
    ;;
esac

#DEBHELPER#

exit 0
