#
# Запуск установки с правами администратора — и честный ответ о результате.
#
# Раньше этим занимался Install.bat одной строкой Start-Process -Verb RunAs, а
# следом безусловно печатал «Done. Launch the shortcut on your desktop». Код
# возврата никто не смотрел. Установка на чужом компьютере падала на середине,
# окно с ошибкой закрывалось само, и человек читал, что ярлык создан, — а его
# не было. Здесь код возврата проверяется, лог сохраняется, и ярлык после
# установки проверяется на самом деле.
#
# Второе, ради чего этот файл нужен: путь к рабочему столу и имя пользователя
# берутся ЗДЕСЬ, до повышения прав. Внутри elevated-процесса
# GetFolderPath("Desktop") и $env:USERNAME принадлежат той учётной записи,
# которую подтвердили в окне UAC. Если это другой администратор, ярлык уезжает
# на его рабочий стол, а задания планировщика регистрируются на него же.
#
$ErrorActionPreference = "Stop"
try { chcp 65001 | Out-Null } catch {}

$Here = $PSScriptRoot
$Installer = Join-Path $Here "Install-Product.ps1"
if (-not (Test-Path $Installer)) {
  Write-Host ""
  Write-Host "Не найден Install-Product.ps1 рядом с этим файлом." -ForegroundColor Red
  Write-Host ("Смотрю сюда: " + $Installer) -ForegroundColor Yellow
  Write-Host "Распакуйте архив целиком в папку и запустите Install.bat оттуда." -ForegroundColor Yellow
  Write-Host ""
  Pause
  exit 1
}

# Рабочий стол через GetFolderPath, а не USERPROFILE\Desktop: у половины машин
# он переехал в OneDrive, и собранный руками путь ведёт в никуда.
$UserDesktop = [Environment]::GetFolderPath("Desktop")
$UserName = [Security.Principal.WindowsIdentity]::GetCurrent().Name
$LogTo = Join-Path $env:TEMP "cpc-install.log"

# Прошлый лог сохраняем. Обычный сценарий неудачи такой: установка падает,
# человек закрывает мешавшую программу и ставит заново — и лог первой,
# единственно интересной попытки затирается успешной второй.
if (Test-Path $LogTo) {
  try { Move-Item $LogTo (Join-Path $env:TEMP "cpc-install.prev.log") -Force } catch {}
}

Write-Host ""
Write-Host "Устанавливаю Claude Proxy Control." -ForegroundColor Cyan
Write-Host "Windows спросит разрешение — нажмите «Да»." -ForegroundColor Yellow
Write-Host ""

$args = @(
  "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", $Installer,
  "-UserDesktop", $UserDesktop,
  "-UserName", $UserName,
  "-LogTo", $LogTo
)

try {
  # -PassThru без -Wait: у повышенного процесса ждать через -Wait можно, но
  # ExitCode тогда часто недоступен, а он здесь и есть весь смысл.
  $p = Start-Process -FilePath "powershell" -Verb RunAs -PassThru -ArgumentList $args
  $p.WaitForExit()
  $rc = $p.ExitCode
} catch {
  Write-Host ""
  Write-Host "Не удалось запустить установку с правами администратора." -ForegroundColor Red
  Write-Host ("  " + $_.Exception.Message) -ForegroundColor Yellow
  Write-Host "Если окно с запросом не появилось — нажмите правой кнопкой по Install.bat" -ForegroundColor Yellow
  Write-Host "и выберите «Запуск от имени администратора»." -ForegroundColor Yellow
  Write-Host ""
  Pause
  exit 1
}

$lnk = Join-Path $UserDesktop "Claude Proxy Control.lnk"
Write-Host ""
if ($rc -eq 0 -and (Test-Path $lnk)) {
  Write-Host "Готово." -ForegroundColor Green
  Write-Host ("Ярлык на рабочем столе: " + $lnk) -ForegroundColor Green
  Write-Host ""
  exit 0
}

# Дальше — только плохие новости, и их надо показать, а не спрятать.
Write-Host "Установка не завершилась." -ForegroundColor Red
if ($rc -ne 0) {
  Write-Host ("  Код возврата: " + $rc) -ForegroundColor Yellow
} else {
  Write-Host "  Установщик отработал, но ярлыка на рабочем столе нет." -ForegroundColor Yellow
  Write-Host ("  Ждал здесь: " + $lnk) -ForegroundColor Yellow
}
if (Test-Path $LogTo) {
  Write-Host ("  Полный лог: " + $LogTo) -ForegroundColor Yellow
  Write-Host ""
  Write-Host "Последние строки:" -ForegroundColor White
  Get-Content $LogTo -Tail 25 | ForEach-Object { Write-Host ("  " + $_) }
}
Write-Host ""
Write-Host "Пришлите этот лог в поддержку — по нему видно, на чём остановилось." -ForegroundColor Yellow
Write-Host ""
Pause
exit 1
