<#
  fws-play.ps1 — session de jeu Windows orchestree pour le retour vers FWS.

  Flux robuste :
   - on desactive la tache ONSTART (evite qu'un declenchement tardif ne rearme
     FWS EN PLEIN MATCH) ;
   - on arme le boot suivant vers WINDOWS (un crash/reboot pendant le jeu revient
     sur Windows, pas ejecte vers FWS au milieu d'un match) ;
   - on lance Valorant et on attend sa fermeture OU son crash ;
   - dans un FINALLY (donc quoi qu'il arrive) : on rearme le boot suivant vers
     FWS, on reactive la tache ONSTART, et on reboote — SEULEMENT si le jeu a
     bien ete vu (pas de reboot force en plein 1er telechargement de patch).

  Le filet permanent BootOrder[0]=FWS couvre tout ce que ce script raterait.
  A lancer a l'ouverture de session du compte gaming (autologin) ou a la main.
  Doit tourner EN ADMIN. #>
$ErrorActionPreference = 'Stop'
$here    = Split-Path -Parent $MyInvocation.MyCommand.Path
$return  = Join-Path $here 'fws-return.ps1'
$taskName = 'FWS-Return-OnStart'
$seen = $false

try {
    # Neutraliser la course avec la tache ONSTART pendant la session.
    try { Disable-ScheduledTask -TaskName $taskName -ErrorAction Stop | Out-Null } catch { }

    # Pendant la session, un crash/reboot doit rester sur WINDOWS.
    try { & $return -Target Windows } catch { Write-Warning "Arm Windows a echoue : $_" }

    # Lancer Valorant via le Riot Client (adapter le chemin si necessaire).
    $riot = Join-Path $Env:ProgramFiles 'Riot Games\Riot Client\RiotClientServices.exe'
    if (Test-Path $riot) {
        Start-Process $riot -ArgumentList '--launch-product=valorant','--launch-patchline=live'
    } else {
        Write-Warning "Riot Client introuvable : $riot — lance Valorant manuellement."
    }

    # Attendre l'apparition du process (SANS plafond serre : un 1er patch Riot /
    # une MAJ Vanguard peuvent etre longs), puis attendre sa fermeture/crash.
    $proc = 'VALORANT-Win64-Shipping'
    for ($i = 0; $i -lt 1440; $i++) {          # ~2 h max d'attente d'apparition
        if (Get-Process $proc -ErrorAction SilentlyContinue) { $seen = $true; break }
        Start-Sleep -Seconds 5
    }
    if ($seen) {
        Get-Process $proc -ErrorAction SilentlyContinue | ForEach-Object { $_.WaitForExit() }
    } else {
        Write-Warning "Jeu jamais detecte — pas de reboot automatique."
    }
}
finally {
    # Rearmer FWS et reactiver la tache, QUOI QU'IL ARRIVE.
    try { & $return -Target FWS } catch { Write-Warning "Arm FWS a echoue : $_ — BootOrder[0]=FWS reste le filet." }
    try { Enable-ScheduledTask -TaskName $taskName -ErrorAction Stop | Out-Null } catch { }
    if ($seen) {
        Start-Sleep -Seconds 2
        Restart-Computer -Force
    } else {
        Write-Warning "Session sans jeu detecte : redemarre manuellement pour revenir a FWS (BootNext deja arme vers FWS)."
    }
}
