#Requires -RunAsAdministrator
$ErrorActionPreference = "Stop"
. (Join-Path $PSScriptRoot "_env.ps1")

$watchScript = Join-Path $ProductHome "Watch-SotaCapture.ps1"
$pwsh = Join-Path $env:SystemRoot "System32\WindowsPowerShell\v1.0\powershell.exe"
# Сообщения отсюда показываются человеку как есть — пишем их по-русски и так,
# чтобы из них было понятно, что делать.
if (-not (Test-Path $watchScript)) {
  throw ("В установленной копии нет файла Watch-SotaCapture.ps1 (" + $watchScript +
         "). Переустановите программу: Install.bat из архива.")
}

Unregister-ScheduledTask -TaskName $TaskWatcher -Confirm:$false -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process -Filter "Name='powershell.exe'" -ErrorAction SilentlyContinue |
  Where-Object { $_.CommandLine -match 'Watch-SotaCapture\.ps1' -and $_.CommandLine -match 'claude-proxy-control' } |
  ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }

# Тот, кто ставит программу, и тот, чьё имя подтвердили в окне UAC, — не всегда
# один человек. $env:USERNAME здесь принадлежит второму, и задание регистриро-
# валось на администратора, а не на владельца компьютера. Настоящее имя приходит
# из Install-Launcher.ps1, который узнаёт его до повышения прав.
$targetUser = $env:CPC_TARGET_USER
if (-not $targetUser) { $targetUser = $env:USERNAME }

$arg = "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$watchScript`""
$action = New-ScheduledTaskAction -Execute $pwsh -Argument $arg
$trigger = New-ScheduledTaskTrigger -AtLogOn -User $targetUser
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -Hidden
$principal = New-ScheduledTaskPrincipal -UserId $targetUser -RunLevel Highest -LogonType Interactive

try {
  Register-ScheduledTask -TaskName $TaskWatcher -Action $action -Trigger $trigger `
    -Settings $settings -Principal $principal -Force | Out-Null
} catch {
  throw ("Windows не дал создать задание для пользователя '" + $targetUser + "': " +
         $_.Exception.Message)
}

# Проверяем, а не верим на слово: Register-ScheduledTask умеет отработать без
# ошибки и не оставить задания, если политика компьютера это запрещает.
$task = Get-ScheduledTask -TaskName $TaskWatcher -ErrorAction SilentlyContinue
if (-not $task) {
  throw ("Задание '" + $TaskWatcher + "' не появилось в планировщике. " +
         "Скорее всего, его запрещает политика этого компьютера.")
}

# Запуск — уже не повод считать установку неудачной: задание создано и всё
# равно поднимется при следующем входе в систему.
try {
  Start-ScheduledTask -TaskName $TaskWatcher
  Start-Sleep -Seconds 2
} catch {
  Write-Host ("Задание создано, но запустить сейчас не вышло: " + $_.Exception.Message) -ForegroundColor Yellow
}

Write-Host ""
Write-Host ("Ловец узлов установлен: " + $TaskWatcher) -ForegroundColor Green
Write-Host ("  Состояние: " + (Get-ScheduledTask -TaskName $TaskWatcher).State)
Write-Host ("  Пользователь: " + $targetUser)
Write-Host ("  Снимки Sota: " + (Join-Path $MergedDir "sota-captured"))
if (-not $env:CLAUDE_PROXY_NOPAUSE) { Pause }
