#!/bin/bash
# ============================================================================
#  FWS — installation des drivers/runtimes VR selon le casque.
#
#  À lancer depuis un terminal (Super+Shift+V sous i3, ou l'entrée
#  « Installation VR (FWS) » du menu d'applications). Réservé aux sessions
#  X11 (i3) : SteamVR ne fonctionne PAS sous Wayland/Hyprland.
#
#  Réalité du support Linux (résumé honnête) :
#    • HTC Vive / Vive Pro / Valve Index (stations lighthouse) → NATIF via
#      SteamVR. C'est le chemin le plus fiable.
#    • Meta/Oculus Quest 1-3, Pico → PAS de support officiel ; streaming
#      Wi-Fi via ALVR (+ SteamVR). ALVR n'est pas dans les dépôts Arch :
#      le script installe la base et donne la marche à suivre.
#    • Oculus Rift CV1/S (filaire) → pas de support utilisable.
#    • Monado : runtime OpenXR libre (déjà proposé par fws-setup-hardware),
#      utile pour les applis OpenXR natives sans SteamVR.
# ============================================================================
set -u
say()  { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; }
warn() { printf '\033[1;33m  ⚠ %s\033[0m\n' "$*"; }

if [ "$(id -u)" -ne 0 ]; then
    exec sudo "$0" "$@"
fi

# lib32 Vulkan selon le GPU (indispensable à SteamVR, qui est 32/64 bits).
GPU="$(lspci 2>/dev/null | grep -iE 'VGA compatible controller|3D controller|Display controller')"
LIB32="lib32-mesa"
case "$GPU" in
    *NVIDIA*|*GeForce*)   LIB32="$LIB32 lib32-nvidia-utils" ;;
    *AMD*|*ATI*|*Radeon*) LIB32="$LIB32 lib32-vulkan-radeon" ;;
    *Intel*)              LIB32="$LIB32 lib32-vulkan-intel" ;;
esac

install_pkgs() {
    # multilib requis pour Steam/lib32.
    grep -qE '^\[multilib\]' /etc/pacman.conf \
        || printf '\n[multilib]\nInclude = /etc/pacman.d/mirrorlist\n' >> /etc/pacman.conf
    pacman -Sy --noconfirm || { warn "synchro pacman échouée (réseau ?)"; return 1; }
    local valid="" p
    for p in "$@"; do
        pacman -Si "$p" >/dev/null 2>&1 && valid="$valid $p" || warn "paquet inconnu ignoré : $p"
    done
    # shellcheck disable=SC2086
    pacman -S --noconfirm --needed $valid
}

steamvr_base() {
    say "Installation de la base SteamVR (Steam + Vulkan 32 bits : $LIB32)…"
    # shellcheck disable=SC2086
    install_pkgs steam $LIB32 || return 1
    say "Base installée. Étapes suivantes :"
    echo "  1. Lance Steam, connecte-toi, puis installe « SteamVR » (Bibliothèque → Outils)."
    echo "  2. Branche le casque et les stations, puis lance SteamVR."
    echo "  3. Premier lancement : SteamVR peut demander à ajuster les règles udev — accepte."
}

case "${1:-menu}" in
    menu)
        cat <<'MENU'

  ╔══════════════════════════════════════════════════════════╗
  ║        FWS — Installation VR (session X11 requise)        ║
  ╠══════════════════════════════════════════════════════════╣
  ║  1) HTC Vive / Vive Pro / Valve Index   (natif, SteamVR)  ║
  ║  2) Meta Quest / Pico                   (streaming ALVR)  ║
  ║  3) Monado (runtime OpenXR libre, sans SteamVR)           ║
  ║  q) Quitter                                               ║
  ╚══════════════════════════════════════════════════════════╝
MENU
        read -rp "  Choix : " choice
        exec "$0" "$choice"
        ;;
    1|vive|index)
        steamvr_base || exit 1
        ;;
    2|quest|pico)
        steamvr_base || exit 1
        say "Streaming Quest/Pico : il faut AUSSI ALVR (pas dans les dépôts Arch) :"
        echo "  1. Télécharge le .tar.gz « ALVR Launcher » : https://github.com/alvr-org/ALVR/releases"
        echo "  2. Sur le casque, installe le client ALVR (App Lab / SideQuest)."
        echo "  3. Lance ALVR sur le PC (même Wi-Fi 5 GHz que le casque) — il pilote SteamVR."
        ;;
    3|monado)
        say "Installation de Monado (OpenXR) + outils…"
        install_pkgs monado || exit 1
        say "Monado installé. Les applis OpenXR le trouvent via /usr/share/openxr/."
        ;;
    q|Q) exit 0 ;;
    *) warn "choix inconnu : ${1}"; exec "$0" menu ;;
esac

echo
read -rp "Terminé — appuie sur Entrée pour fermer. " _
