#!/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}"
}

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
}

log "Starting gaming-mode-enter"

import_xfce_environment

export DISPLAY="${DISPLAY:-:20}"

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

mkdir -p "${STATE_DIR}"

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..."
    timeout 2s xfdesktop --quit >/dev/null 2>&1 || \
        log "xfdesktop --quit timed out or returned an error"

    log "xfdesktop step completed"
fi

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

    log "Stopping xfce4-panel..."
    timeout 2s xfce4-panel -q >/dev/null 2>&1 || \
        log "xfce4-panel -q timed out or returned an error"

    log "xfce4-panel step completed"
fi

if command -v xsetroot >/dev/null 2>&1; then
    log "Setting root background to black"

    timeout 2s xsetroot -solid black >/dev/null 2>&1 || \
        log "xsetroot timed out or returned an error"
fi

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

log "Gaming mode enabled"
exit 0