param([switch]$AutoStart)

$ErrorActionPreference = 'Stop'

$repo = Join-Path $env:USERPROFILE 'TibiaPilotNG'
$autoStartFile = Join-Path $repo '.pilotng-autostart'

# Beenden ueber den kanonischen Stopp. Hier stand frueher ein eigener
# Filter auf ".venv\Scripts\python*" - ein Bot, der mit dem Python des
# Systems lief, ueberlebte damit den Neustart, und der frisch gestartete
# kam obendrauf. Ergebnis waren zwei Bots, die gleichzeitig Maus und
# Tastatur bedienten.
& (Join-Path $repo 'tools\Stop-TibiaPilotNG.ps1') 2>$null | Out-Null

if ($AutoStart) {
    Set-Content $autoStartFile '1' -Encoding ascii
} else {
    Remove-Item $autoStartFile -Force -ErrorAction SilentlyContinue
}

# Auf das echte Ende warten, sonst startet der neue Lauf in den
# Aufraeumvorgang des alten hinein (der Arduino-Port ist dann noch
# belegt).
for ($versuch = 0; $versuch -lt 40; $versuch++) {
    $laeuft = @(Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
        Where-Object { $_.Name -like 'python*.exe' -and
                       [string]$_.CommandLine -match 'main\.py' })
    if ($laeuft.Count -eq 0) { break }
    Start-Sleep -Milliseconds 250
}

Start-ScheduledTask -TaskName 'TibiaPilotNG'
Start-Sleep -Seconds 4

$task = Get-ScheduledTask -TaskName 'TibiaPilotNG'
$processes = @(Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -like 'python*.exe' -and
                   [string]$_.CommandLine -match 'main\.py' })

[pscustomobject]@{
    TaskState = [string]$task.State
    BotProcesses = $processes.Count
    ProcessIds = @($processes | ForEach-Object { $_.ProcessId })
} | ConvertTo-Json
