#!/usr/bin/env bash

set -u

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="${SCRIPT_DIR}/gaming-mode.log"

log() {
    printf '[%s] [ENTER] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >> "${LOG_FILE}"
}

# Récupère l'environnement réel de la session XFCE.
import_xfce_environment() {
    local session_pid
    local entry

    session_pid="$(pgrep -u "$(id -u)" -x xfce4-session | head -n 1 || true)"

    if [[ -n "${session_pid}" && -r "/proc/${session_pid}/environ" ]]; then
        while IFS= read -r -d '' entry; do
            case "${entry}" in
                DISPLAY=*|XAUTHORITY=*|DBUS_SESSION_BUS_ADDRESS=*|XDG_RUNTIME_DIR=*)
                    export "${entry}"
                    ;;
            esac
        done < "/proc/${session_pid}/environ"
    fi
}

import_xfce_environment

# Fallback correspondant à notre stack actuelle.
export DISPLAY="${DISPLAY:-:20}"

STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/sunshine-gaming-mode"
STATE_FILE="${STATE_DIR}/xfce-state"

mkdir -p "${STATE_DIR}"

log "Entering gaming mode on DISPLAY=${DISPLAY}"

desktop_was_running=0
panel_was_running=0

if pgrep -u "$(id -u)" -x xfdesktop >/dev/null 2>&1; then
    desktop_was_running=1

    log "Stopping xfdesktop"
    xfdesktop --quit >/dev/null 2>&1 || true
fi

if pgrep -u "$(id -u)" -x xfce4-panel >/dev/null 2>&1; then
    panel_was_running=1

    log "Stopping xfce4-panel"
    xfce4-panel --quit >/dev/null 2>&1 || true
fi

# Laisse un fond propre pendant le lancement du jeu.
if command -v xsetroot >/dev/null 2>&1; then
    xsetroot -solid black >/dev/null 2>&1 || true
fi

cat > "${STATE_FILE}" <<EOF
desktop=${desktop_was_running}
panel=${panel_was_running}
EOF

log "Gaming mode enabled"

# Ne jamais empêcher Sunshine de lancer le jeu.
exit 0