#!/bin/bash

export TERM=linux

systemctl stop kmsconvt@tty1.service

# WICHTIG: feste Bindung an tty1 für dialog
exec </dev/tty1 >/dev/tty1 2>&1

setfont
clear

logger -t snuk-firstboot "Script started"
logger -t snuk-firstboot "TTY: $(tty)"
logger -t snuk-firstboot "TERM: $TERM"
logger -t snuk-firstboot "Loading console font"
logger -t snuk-firstboot "Starting first dialog"

DONEFILE="/etc/snukware-firstboot.done"

[ -f "$DONEFILE" ] && exit 0

# Nur auf echter Konsole laufen
[ -t 0 ] || exit 0

# Sprache
LANG_TMP=$(mktemp)

dialog \
  --title "Welcome to Snukware" \
  --msgbox "Welcome to Snukware First Boot Setup.\n\nPress OK to continue." \
  10 60

dialog \
  --title "Snukware Setup" \
  --menu "Select Language" \
  15 60 5 \
  "en_US.UTF-8" "English" \
  "en_GB.UTF-8" "English (UK)" \
  "de_DE.UTF-8" "Deutsch" \
  "fr_FR.UTF-8" "Francais" \
  "es_ES.UTF-8" "Espanol" \
  2>"$LANG_TMP"

LANGUAGE=$(cat "$LANG_TMP")
rm -f "$LANG_TMP"

[ -z "$LANGUAGE" ] && LANGUAGE="en_US.UTF-8"

# Tastatur
KEY_TMP=$(mktemp)

dialog \
  --title "Snukware Setup" \
  --menu "Select Keyboard Layout" \
  15 60 5 \
  "us" "US English" \
  "uk" "British English" \
  "de" "German" \
  "fr" "French" \
  "es" "Spanish" \
  2>"$KEY_TMP"

KEYMAP=$(cat "$KEY_TMP")
rm -f "$KEY_TMP"

[ -z "$KEYMAP" ] && KEYMAP="us"

# Zeitzone
TZ_TMP=$(mktemp)

dialog \
  --title "Snukware Setup" \
  --menu "Select Timezone" \
  20 70 10 \
  "UTC" "Universal Time" \
  "Europe/Berlin" "Germany" \
  "Europe/London" "United Kingdom" \
  "Europe/Paris" "France" \
  "America/New_York" "US East Coast" \
  "America/Chicago" "US Central" \
  "America/Denver" "US Mountain" \
  "America/Los_Angeles" "US West Coast" \
  2>"$TZ_TMP"

TIMEZONE=$(cat "$TZ_TMP")
rm -f "$TZ_TMP"

[ -z "$TIMEZONE" ] && TIMEZONE="UTC"

while true; do

    HOST_TMP=$(mktemp)

    dialog \
        --title "Snukware Setup" \
        --inputbox "Enter hostname:" \
        10 50 \
        "snukware" \
        2>"$HOST_TMP"

    RET=$?

    HOSTNAME=$(cat "$HOST_TMP")
    rm -f "$HOST_TMP"

    # Benutzer hat Cancel gedrückt
    [ $RET -ne 0 ] && HOSTNAME="snukware" && break

    # Leer -> Standard verwenden
    [ -z "$HOSTNAME" ] && HOSTNAME="snukware"

    # Hostname validieren
    if [[ "$HOSTNAME" =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$ ]]; then
        break
    fi

    dialog \
        --title "Invalid Hostname" \
        --msgbox \
        "Hostname may only contain letters,\nnumbers and hyphens.\n\nExample:\nsnukbox\nserver01\nlaptop-work" \
        12 50

done

# Grafische Anmeldung
if dialog \
    --title "Snukware Setup" \
    --yesno \
    "Enable graphical login?\n\nSelecting 'Yes' enables the SDDM display manager.\nSelecting 'No' keeps the system in console mode." \
    11 60
then
    ENABLE_SDDM=1
else
    ENABLE_SDDM=0
fi

# Konfiguration schreiben
cat > /etc/locale.conf <<EOF
LANG=$LANGUAGE
EOF

cat > /etc/vconsole.conf <<EOF
KEYMAP=$KEYMAP
EOF

ln -sf "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime

hostnamectl set-hostname "$HOSTNAME"

if [ "$ENABLE_SDDM" -eq 1 ]; then
    systemctl enable sddm.service
    LOGIN_MODE="Graphical (SDDM)"
else
    LOGIN_MODE="Console"
fi

dialog \
  --title "Snukware Setup" \
  --msgbox \
"Configuration saved.

Language: $LANGUAGE
Keyboard: $KEYMAP
Timezone: $TIMEZONE
Hostname: $HOSTNAME
Login: $LOGIN_MODE" \
  13 60

touch "$DONEFILE"

systemctl disable snukware-firstboot.service >/dev/null 2>&1

clear

dialog \
  --title "Snukware Setup Complete" \
  --msgbox \
"Setup is complete.

The system will reboot now.

Please wait..." \
  10 50

systemctl reboot

exit 0
