#Requires -RunAsAdministrator
<#
  Удаление Claude Proxy Control.

  Нужно ровно для того, ради чего продукт ставят на чужую машину: посмотреть, как
  он себя ведёт, и убрать за собой. Без этого на компьютере остаются два задания
  планировщика, правило брандмауэра и адаптер — то, чего пользователь сам не найдёт.

  Лицензия при этом НЕ освобождается: привязка живёт на сервере, снять её можно
  только в кабинете. Об этом сказано прямо в конце.
#>
param([switch]$KeepData)
$ErrorActionPreference = "Continue"
try { chcp 65001 | Out-Null } catch {}

. (Join-Path $PSScriptRoot "_env.ps1")

Write-Host ""
Write-Host "============================================================" -ForegroundColor White
Write-Host "  Удаление Claude Proxy Control" -ForegroundColor Cyan
Write-Host "============================================================" -ForegroundColor White
Write-Host ("  Папка продукта: " + $ProductHome)
Write-Host ""

# 1. Сначала снять маршрутизацию, потом убирать файлы. В обратном порядке
#    туннель остался бы поднятым без единого скрипта, способного его выключить.
Write-Host "  Останавливаю туннель…" -ForegroundColor Yellow
$stopped = 0
try { $stopped = Stop-CpcSingBox } catch {}
Write-Host ("    процессов остановлено: " + $stopped)

# 2. Правило брандмауэра. Оставленное, оно молча резало бы весь исходящий трафик.
if (Remove-CpcKillSwitchRule) {
  Write-Host "    снято правило брандмауэра CPC-KillSwitch-TunRebuild" -ForegroundColor Green
}

# 3. Адаптеры и их устройства — только наши, чужие VPN не трогаем.
try { [void](Clear-CpcOrphanWintun) } catch {}

# 4. Задания планировщика.
foreach ($t in @($TaskWatcher, $TaskMonitor)) {
  $task = Get-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue
  if ($task) {
    try { Stop-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue } catch {}
    Unregister-ScheduledTask -TaskName $t -Confirm:$false -ErrorAction SilentlyContinue
    Write-Host ("    удалено задание: " + $t) -ForegroundColor Green
  }
}

# 5. Ярлык.
$lnk = Join-Path ([Environment]::GetFolderPath("Desktop")) "Claude Proxy Control.lnk"
if (Test-Path $lnk) {
  Remove-Item $lnk -Force -ErrorAction SilentlyContinue
  Write-Host "    удалён ярлык на рабочем столе" -ForegroundColor Green
}

# 6. Файлы. Скрипт лежит внутри удаляемой папки, поэтому удаление откладываем
#    на отдельный процесс — иначе PowerShell держит собственный файл.
if ($KeepData) {
  Write-Host ""
  Write-Host ("  Файлы оставлены: " + $ProductHome) -ForegroundColor Yellow
} else {
  Write-Host ""
  Write-Host "  Удаляю файлы продукта…" -ForegroundColor Yellow
  $selfInside = $PSScriptRoot.StartsWith($ProductHome, [System.StringComparison]::OrdinalIgnoreCase)
  if ($selfInside) {
    $cleaner = Join-Path $env:TEMP "cpc-remove-home.ps1"
    $body = @(
      'Start-Sleep -Seconds 2',
      ('Remove-Item -LiteralPath "' + $ProductHome + '" -Recurse -Force -ErrorAction SilentlyContinue')
    )
    Set-Content -Path $cleaner -Value $body -Encoding UTF8
    Start-Process powershell -ArgumentList @("-NoProfile", "-ExecutionPolicy", "Bypass", "-WindowStyle", "Hidden", "-File", $cleaner) | Out-Null
    Write-Host "    папка будет удалена через пару секунд" -ForegroundColor Green
  } else {
    Remove-Item -LiteralPath $ProductHome -Recurse -Force -ErrorAction SilentlyContinue
    Write-Host "    папка удалена" -ForegroundColor Green
  }
}

Write-Host ""
Write-Host "Готово." -ForegroundColor Green
Write-Host ""
Write-Host "Важно: ключ остался привязан к этому компьютеру." -ForegroundColor Yellow
Write-Host "Чтобы освободить его под другую машину, зайдите в кабинет"
Write-Host "https://api.proxy.mindq.ru/cabinet и нажмите «отвязать»."
Write-Host ""
if (-not $env:CLAUDE_PROXY_NOPAUSE) { Pause }
