#!/usr/bin/env bash
# ===========================================================================
#  Stellt den Pi auf reinen Anzeigebetrieb um: kein Desktop mehr, Start direkt
#  in die Konsole, tvwall malt ueber DRM/KMS unmittelbar auf den Bildschirm.
#
#  Aufruf:  sudo /opt/tvwall/scripts/console-mode.sh [--zurueck]
#
#  --zurueck stellt den Desktop-Betrieb wieder her.
# ===========================================================================
set -euo pipefail

CONF="/etc/tvwall/tvwall.conf"
INSTALLER="/opt/tvwall/install.sh"

info() { printf '\033[1;36m==>\033[0m %s\n' "$*"; }
ok()   { printf '\033[1;32m  ✓\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m  !\033[0m %s\n' "$*"; }
die()  { printf '\033[1;31mFehler:\033[0m %s\n' "$*" >&2; exit 1; }

[[ $EUID -eq 0 ]] || die "bitte mit sudo starten:  sudo $0"

if [[ "${1:-}" == "--zurueck" ]]; then
  info "Stelle den Desktop-Betrieb wieder her"
  systemctl set-default graphical.target
  systemctl enable lightdm >/dev/null 2>&1 || true
  systemctl enable getty@tty1.service >/dev/null 2>&1 || true
  sed -i 's|^DISPLAY_MODE=.*|DISPLAY_MODE="auto"|' "$CONF"
  [[ -x "$INSTALLER" ]] && "$INSTALLER" --no-ap --yes >/dev/null
  ok "Desktop wieder aktiv - bitte neu starten:  sudo reboot"
  exit 0
fi

info "Boot-Ziel auf Konsole umstellen"
systemctl set-default multi-user.target >/dev/null
ok "Standard-Ziel: $(systemctl get-default)"

info "Desktop-Anmeldung abschalten"
for dm in lightdm gdm3 sddm; do
  if systemctl list-unit-files "$dm.service" >/dev/null 2>&1 &&
     systemctl is-enabled "$dm" >/dev/null 2>&1; then
    systemctl disable "$dm" >/dev/null 2>&1 || true
    systemctl stop "$dm" || true
    ok "$dm abgeschaltet"
  fi
done
sleep 1
[[ "$(pgrep -c 'labwc|wayfire|Xorg' 2>/dev/null || echo 0)" == "0" ]] \
  && ok "keine Desktop-Oberflaeche mehr aktiv" \
  || warn "es laeuft noch eine Oberflaeche - nach dem Neustart ist sie weg"

info "Bildausgabe auf DRM festlegen"
sed -i 's|^DISPLAY_MODE=.*|DISPLAY_MODE="drm"|' "$CONF"
ok 'DISPLAY_MODE="drm"'

# Der Benutzer des Dienstes braucht Zugriff auf Grafik und Konsole.
RUN_USER="$(sed -n 's/^RUN_USER="\(.*\)"/\1/p' "$CONF" | head -1)"
RUN_USER="${RUN_USER:-tvwall}"
for grp in video render input tty; do
  getent group "$grp" >/dev/null && usermod -aG "$grp" "$RUN_USER" 2>/dev/null || true
done
ok "Benutzer $RUN_USER hat Zugriff auf Grafik und Konsole"

if [[ -x "$INSTALLER" ]]; then
  info "Dienst auf die Konsolen-Variante umstellen"
  "$INSTALLER" --no-ap --yes >/dev/null
  ok "systemd-Dienst neu eingerichtet"
else
  warn "$INSTALLER fehlt - bitte install.sh aus dem Paket erneut ausfuehren"
fi

cat <<EOF

===========================================================================
 Fertig. Nach dem Neustart faehrt der Pi ohne Desktop hoch und zeigt
 sofort die Playliste.

   sudo reboot

 Zurueck zum Desktop:  sudo $0 --zurueck
===========================================================================
EOF
