#!/usr/bin/env bash
# openSUSE Furcifer Game Performance Wrapper
# Sets performance-oriented system parameters for gaming sessions.
# Usage: game-performance <command>
#   or:  game-performance --daemon <pid>

set -euo pipefail

apply_performance() {
    # Set CPU governor to performance
    echo "performance" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 2>/dev/null || true

    # Set power profile to performance
    powerprofilesctl set performance 2>/dev/null || true

    # Disable C-states deeper than C1 for lower latency
    # echo 1 | tee /sys/module/intel_idle/parameters/max_cstate 2>/dev/null || true

    # Set process priority to real-time-ish
    chrt -r -p 99 $$ 2>/dev/null || true
}

restore_settings() {
    # Restore to ondemand or schedutil governor
    if [ -f "/usr/bin/powerprofilesctl" ]; then
        powerprofilesctl set balanced 2>/dev/null || true
    fi
}

if [ $# -eq 0 ]; then
    echo "Usage: game-performance <command>"
    echo "       game-performance --daemon <pid>"
    exit 1
fi

case "$1" in
    --daemon)
        PID="${2:-}"
        if [ -z "$PID" ]; then
            echo "Usage: game-performance --daemon <pid>"
            exit 1
        fi
        apply_performance
        # Wait for the game process to exit, then restore
        while kill -0 "$PID" 2>/dev/null; do
            sleep 5
        done
        restore_settings
        ;;
    *)
        apply_performance
        exec "$@"
        ;;
esac
