#!/usr/bin/env bash
# Prepares the kiosk after install, upgrade or a settings change.
# Run by talking-heads setup (and config).
#
# - creates /etc/talking-heads/config on first run (never overwritten),
#   with the current display manager and target as desktop mode
# - creates the kiosk user
# - runs talking-heads@.service as that user
# - restarts the kiosk if it is running
#
# Idempotent.

set -e

CONFIG=/etc/talking-heads/config
TEMPLATE=/usr/local/share/talking-heads/talking-heads.conf
DROPIN=/etc/systemd/system/talking-heads@.service.d/user.conf

# Display manager currently used: active > enabled > installed
detect_display_manager() {
    local dm
    for dm in sddm lightdm gdm3 gdm; do
        systemctl is-active --quiet "$dm" 2>/dev/null && echo "$dm" && return
    done
    for dm in sddm lightdm gdm3 gdm; do
        systemctl is-enabled --quiet "$dm" 2>/dev/null && echo "$dm" && return
    done
    for dm in sddm lightdm gdm3; do
        dpkg -l "$dm" 2>/dev/null | grep -q '^ii' && echo "$dm" && return
    done
    true
}

if [[ ! -f "$CONFIG" ]]; then
    dm=$(detect_display_manager)
    target=$(systemctl get-default)
    mkdir -p "$(dirname "$CONFIG")"
    sed \
        -e "s|^DESKTOP_DISPLAY_MANAGER=.*|DESKTOP_DISPLAY_MANAGER=$dm|" \
        -e "s|^DESKTOP_TARGET=.*|DESKTOP_TARGET=$target|" \
        "$TEMPLATE" >"$CONFIG"
    echo "==> Created $CONFIG (desktop mode: ${dm:-no display manager}, $target)"
fi
source "$CONFIG"
KIOSK_USER="${KIOSK_USER:-kiosk}"

if ! id "$KIOSK_USER" &>/dev/null; then
    # No password: the account is only used by the kiosk session.
    useradd --create-home --user-group --comment "Talking Heads kiosk" "$KIOSK_USER"
    echo "==> Created user $KIOSK_USER"
fi

mkdir -p "$(dirname "$DROPIN")"
cat >"$DROPIN" <<EOF
# Generated by talking-heads setup from KIOSK_USER in $CONFIG
[Service]
User=$KIOSK_USER
EOF

systemctl daemon-reload
systemctl try-restart 'talking-heads@*.service'
