$ErrorActionPreference = 'Stop'

$repo = Join-Path $env:USERPROFILE 'TibiaPilotNG'
$python = Join-Path $repo '.venv\Scripts\pythonw.exe'
$pythonConsole = Join-Path $repo '.venv\Scripts\python.exe'
$exitFile = Join-Path $repo '.app-exit.txt'
$autoStartFile = Join-Path $repo '.pilotng-autostart'
$displayFile = Join-Path $repo '.bot-display.json'
$obs = & (Join-Path $PSScriptRoot 'Find-OBS.ps1') -Required

& $pythonConsole (Join-Path $repo 'tools\Resolve-Bot-Display.py') | Out-Null
if ($LASTEXITCODE -ne 0 -or !(Test-Path $displayFile)) {
    throw 'Der ausgewählte Bot-Bildschirm ist nicht verfügbar.'
}
$display = Get-Content $displayFile -Raw | ConvertFrom-Json
$autoStart = Test-Path $autoStartFile
if ($autoStart -and ($display.width -ne 1920 -or $display.height -ne 1080)) {
    throw 'Der Ein-Klick-Start hat den Bot-Bildschirm nicht auf 1920×1080 vorbereitet.'
}

if (!(Test-Path $obs)) {
    throw 'OBS Studio not found.'
}
if (!(Get-Process obs64 -ErrorAction SilentlyContinue)) {
    Start-Process -FilePath $obs `
        -WorkingDirectory (Split-Path $obs) `
        -ArgumentList '--collection', 'TibiaPilotNG', '--profile', 'TibiaPilotNG', '--scene', 'TibiaPilotNG', '--minimize-to-tray'
    Start-Sleep -Seconds 8
}

$processInfo = [System.Diagnostics.ProcessStartInfo]::new()
$processInfo.FileName = $python
$processInfo.Arguments = 'main.py'
$processInfo.WorkingDirectory = $repo
$processInfo.UseShellExecute = $false
$processInfo.CreateNoWindow = $true
$processInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
$processInfo.EnvironmentVariables['TIBIAPILOT_CAPTURE_X'] = [string]$display.x
$processInfo.EnvironmentVariables['TIBIAPILOT_CAPTURE_Y'] = [string]$display.y
$processInfo.EnvironmentVariables['TIBIAPILOT_CAPTURE_WIDTH'] = [string]$display.width
$processInfo.EnvironmentVariables['TIBIAPILOT_CAPTURE_HEIGHT'] = [string]$display.height
# TIBIAPILOT_OUTPUT_IDX wird BEWUSST nicht gesetzt.
#
# Hier stand der Ausgang des Spiel-Bildschirms. Von dort liest die
# Bildschirmaufnahme aber nur Schwarz, weil der Client randlos im
# Vollbild laeuft. Der Bot waehlt seinen Ausgang selbst
# (getCaptureDisplay): den virtuellen Bildschirm mit dem OBS-Projektor.
# Mit dem alten Zwang fiel er still auf den langsameren Weg ueber die
# OBS-Schnittstelle zurueck.
$processInfo.EnvironmentVariables['TIBIAPILOT_SCREEN_X'] = [string]$display.x
$processInfo.EnvironmentVariables['TIBIAPILOT_SCREEN_Y'] = [string]$display.y
if ($autoStart) {
    $processInfo.EnvironmentVariables['TIBIAPILOT_AUTOSTART'] = '1'
    Remove-Item $autoStartFile -Force
}

$process = [System.Diagnostics.Process]::Start($processInfo)
$process.WaitForExit()
$process.ExitCode | Set-Content $exitFile -Encoding ascii
