#!/usr/bin/env bash
#
# BASKIDS kiosk voor Raspberry Pi
#
# Zet Chromium bij het opstarten fullscreen op de Short Circuit display-pagina.
# Draaien op de Pi zelf:
#
#   bash install-kiosk.sh
#   sudo reboot
#
# Andere pagina? Pas /home/$USER/kiosk-url.txt aan en start opnieuw op.
# Kiosk tijdelijk uit? Sluit een toetsenbord aan en druk Alt+F4, of via ssh:
#   pkill chromium
# Kiosk permanent uit:
#   rm ~/.config/autostart/baskids-kiosk.desktop
#
set -euo pipefail

URL_DEFAULT="https://shortcircuit.brandnewguys.co/baskids"
GEBRUIKER="${SUDO_USER:-$USER}"
THUIS="$(getent passwd "$GEBRUIKER" | cut -d: -f6)"

echo "==> Kiosk installeren voor gebruiker $GEBRUIKER"

# ---------------------------------------------------------------- pakketten
echo "==> Pakketten controleren"
sudo apt-get update -qq
# unclutter verstopt de muisaanwijzer, want die blijft anders midden in beeld
# hangen en je hebt geen muis om hem weg te duwen.
sudo apt-get install -y -qq chromium-browser unclutter x11-xserver-utils 2>/dev/null \
  || sudo apt-get install -y -qq chromium unclutter x11-xserver-utils

# ---------------------------------------------------------------- url
if [ ! -f "$THUIS/kiosk-url.txt" ]; then
  echo "$URL_DEFAULT" > "$THUIS/kiosk-url.txt"
  chown "$GEBRUIKER":"$GEBRUIKER" "$THUIS/kiosk-url.txt"
fi
echo "==> Pagina: $(cat "$THUIS/kiosk-url.txt")"

# ---------------------------------------------------------------- startscript
cat > "$THUIS/baskids-kiosk.sh" <<'SCRIPT'
#!/usr/bin/env bash
#
# Start Chromium fullscreen. Draait in een lus, dus als de browser crasht of
# iemand hem afsluit komt hij vanzelf terug.

URL="$(cat "$HOME/kiosk-url.txt" 2>/dev/null || echo https://shortcircuit.brandnewguys.co/baskids)"

# Scherm niet laten dimmen of in slaap vallen. Zonder dit staat er na tien
# minuten een zwart scherm terwijl de kinderen binnenkomen.
xset s off          2>/dev/null || true
xset s noblank      2>/dev/null || true
xset -dpms          2>/dev/null || true

# Muisaanwijzer verbergen zodra hij een seconde stilstaat.
pgrep -x unclutter >/dev/null || unclutter -idle 1 -root &

# Wachten tot er echt internet is. De Pi is vaak sneller op dan de wifi, en
# dan opent Chromium een foutpagina en blijft daarop staan.
for _ in $(seq 1 30); do
  ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 && break
  sleep 2
done

# Chromium onthoudt na een stroomstoring dat hij "onverwacht is afgesloten" en
# zet daar een gele balk over het beeld. Die vlaggen wissen dat geheugen.
PROFIEL="$HOME/.config/chromium/Default/Preferences"
if [ -f "$PROFIEL" ]; then
  sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/'       "$PROFIEL" 2>/dev/null || true
  sed -i 's/"exited_cleanly":false/"exited_cleanly":true/'     "$PROFIEL" 2>/dev/null || true
fi

BROWSER="$(command -v chromium-browser || command -v chromium)"

while true; do
  "$BROWSER" \
    --kiosk \
    --noerrdialogs \
    --disable-infobars \
    --disable-session-crashed-bubble \
    --disable-features=Translate,TranslateUI \
    --check-for-update-interval=31536000 \
    --autoplay-policy=no-user-gesture-required \
    --start-fullscreen \
    "$URL"

  # Hier komt hij alleen als Chromium is afgesloten. Even wachten en opnieuw,
  # anders draait de lus op volle snelheid als er iets structureel mis is.
  sleep 5
done
SCRIPT

chmod +x "$THUIS/baskids-kiosk.sh"
chown "$GEBRUIKER":"$GEBRUIKER" "$THUIS/baskids-kiosk.sh"

# ---------------------------------------------------------------- autostart
mkdir -p "$THUIS/.config/autostart"
cat > "$THUIS/.config/autostart/baskids-kiosk.desktop" <<DESKTOP
[Desktop Entry]
Type=Application
Name=BASKIDS kiosk
Exec=$THUIS/baskids-kiosk.sh
X-GNOME-Autostart-enabled=true
DESKTOP
chown -R "$GEBRUIKER":"$GEBRUIKER" "$THUIS/.config/autostart"

# ---------------------------------------------------------------- afronden
echo
echo "==> Klaar."
echo
echo "    Pagina:      $(cat "$THUIS/kiosk-url.txt")"
echo "    Wijzigen:    nano $THUIS/kiosk-url.txt   (daarna opnieuw opstarten)"
echo "    Uitzetten:   rm $THUIS/.config/autostart/baskids-kiosk.desktop"
echo
echo "    Nog te doen als je dat niet al hebt gedaan:"
echo "      sudo raspi-config  ->  System Options  ->  Boot / Auto Login"
echo "                             kies: Desktop Autologin"
echo
echo "    Daarna: sudo reboot"
echo
