#!/usr/bin/env bash
set -Eeuo pipefail

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_SOURCE="${1:-$SCRIPT_DIR/config}"
TARGET_USER="${SUDO_USER:-$USER}"
[[ "$TARGET_USER" != "root" ]] || { echo "Exécutez ce script avec sudo depuis le compte bureau, pas depuis une session root directe."; exit 1; }
TARGET_HOME="$(getent passwd "$TARGET_USER" | cut -d: -f6)"
TARGET_UID="$(id -u "$TARGET_USER")"

[[ -f "$CONFIG_SOURCE" ]] || { echo "Configuration absente: $CONFIG_SOURCE"; echo "Copiez config.example vers config et renseignez TV_URL."; exit 1; }
grep -Eq '^TV_URL="https?://' "$CONFIG_SOURCE" || { echo "TV_URL invalide dans $CONFIG_SOURCE"; exit 1; }

if [[ $EUID -ne 0 ]]; then exec sudo -E bash "$0" "$@"; fi

. /etc/os-release || true
echo "OS détecté: ${PRETTY_NAME:-inconnu}"
echo "Utilisateur kiosque: $TARGET_USER"

apt-get update
apt-get install -y curl x11-xserver-utils xdotool network-manager-gnome xbindkeys vnstat
if apt-cache show chromium >/dev/null 2>&1; then
  apt-get install -y chromium
elif apt-cache show chromium-browser >/dev/null 2>&1; then
  apt-get install -y chromium-browser
else
  echo "Aucun paquet Chromium compatible n\'a été trouvé."
  exit 1
fi
# Outils facultatifs selon le serveur graphique disponible.
apt-get install -y unclutter 2>/dev/null || true
apt-get install -y wtype 2>/dev/null || true

install -d -m 0755 /opt/salsabil-tv/bin /opt/salsabil-tv/assets /etc/salsabil-tv
install -m 0755 "$SCRIPT_DIR"/bin/*.sh /opt/salsabil-tv/bin/
install -m 0755 "$SCRIPT_DIR/bin/configure-shortcuts.py" /opt/salsabil-tv/bin/
install -m 0644 "$SCRIPT_DIR/assets/splash.html" /opt/salsabil-tv/assets/
install -m 0644 "$SCRIPT_DIR/assets/salsabil-madrassas-logo.png" /opt/salsabil-tv/assets/
install -m 0644 "$SCRIPT_DIR/COMMANDES_SSH_SALSABIL_TV.txt" /opt/salsabil-tv/
install -m 0640 "$CONFIG_SOURCE" /etc/salsabil-tv/config
chown -R root:root /opt/salsabil-tv
chown root:"$TARGET_USER" /etc/salsabil-tv/config
chmod 0755 /etc/salsabil-tv

ln -sfn /opt/salsabil-tv/bin/salsabil-tv-control.sh /usr/local/bin/salsabil-tv
ln -sfn /opt/salsabil-tv/bin/salsabil-tv-data-report.sh /usr/local/bin/salsabil-tv-data

# Active le suivi léger de la consommation réseau. Les statistiques commencent ici.
DEFAULT_INTERFACE="$(ip route show default 2>/dev/null | awk 'NR==1{print $5}')"
if [[ -n "$DEFAULT_INTERFACE" ]]; then
  vnstat --add -i "$DEFAULT_INTERFACE" >/dev/null 2>&1 || true
fi
systemctl enable --now vnstat >/dev/null 2>&1 || systemctl enable --now vnstat.service >/dev/null 2>&1 || true

install -d -m 0755 "$TARGET_HOME/.config/systemd/user" "$TARGET_HOME/.config/autostart"
install -m 0644 "$SCRIPT_DIR/systemd/salsabil-tv.service" "$TARGET_HOME/.config/systemd/user/salsabil-tv.service"
cat > "$TARGET_HOME/.config/autostart/salsabil-tv-session.desktop" <<'DESKTOP'
[Desktop Entry]
Type=Application
Name=Salsabil Screen Session
Exec=sh -lc 'systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS; systemctl --user restart salsabil-tv.service'
X-GNOME-Autostart-enabled=true
NoDisplay=true
DESKTOP
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.config/systemd" "$TARGET_HOME/.config/autostart"

# Fallback officiel labwc : importe l'environnement et démarre le service.
LABWC_AUTOSTART="$TARGET_HOME/.config/labwc/autostart"
install -d -m 0755 "$(dirname "$LABWC_AUTOSTART")"
touch "$LABWC_AUTOSTART"
if ! grep -q 'SALSABIL-TV-BEGIN' "$LABWC_AUTOSTART"; then
cat >> "$LABWC_AUTOSTART" <<'LABWC'
# SALSABIL-TV-BEGIN
systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
systemctl --user restart salsabil-tv.service &
# SALSABIL-TV-END
LABWC
fi
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.config/labwc"

runuser -u "$TARGET_USER" -- env HOME="$TARGET_HOME" python3 /opt/salsabil-tv/bin/configure-shortcuts.py || true

# Raccourcis X11 fallback via xbindkeys.
cat > "$TARGET_HOME/.xbindkeysrc" <<'XBIND'
"/opt/salsabil-tv/bin/reload-player.sh"
  Control+Alt + r
"/opt/salsabil-tv/bin/open-network-settings.sh"
  Control+Alt + w
XBIND
cat > "$TARGET_HOME/.config/autostart/salsabil-tv-xbindkeys.desktop" <<'DESKTOP'
[Desktop Entry]
Type=Application
Name=Salsabil Screen Shortcuts
Exec=xbindkeys
X-GNOME-Autostart-enabled=true
NoDisplay=true
DESKTOP
chown "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.xbindkeysrc" "$TARGET_HOME/.config/autostart/salsabil-tv-xbindkeys.desktop"

loginctl enable-linger "$TARGET_USER" || true
runuser -u "$TARGET_USER" -- env HOME="$TARGET_HOME" XDG_RUNTIME_DIR="/run/user/$TARGET_UID" systemctl --user daemon-reload || true
runuser -u "$TARGET_USER" -- env HOME="$TARGET_HOME" XDG_RUNTIME_DIR="/run/user/$TARGET_UID" systemctl --user enable salsabil-tv.service || true

echo
echo "Installation terminée. Redémarrez avec: sudo reboot"
echo "Pilotage: salsabil-tv status | start | stop | restart | logs | follow"
echo "Données: salsabil-tv data AAAA-MM-JJ AAAA-MM-JJ"
echo "Journaux: journalctl --user -u salsabil-tv.service -f"
echo "Raccourcis: Ctrl+Alt+R (recharger), Ctrl+Alt+W (Wi-Fi)"
