#Requires -Version 5.1
<#
  Снимает защитное правило брандмауэра, оставшееся после оборванной пересборки
  туннеля. Нужен отдельно от Reload-VpnRoutes.ps1 потому, что снимать правило
  надо и тогда, когда до перезапуска маршрутов дело уже не дойдёт: программа
  упала внутри паузы, компьютер выключили по питанию и т.п.

  Запускается с правами администратора. Ничего, кроме своего правила и маркера,
  не трогает.
#>
try { chcp 65001 | Out-Null } catch {}
$ErrorActionPreference = "Continue"

if (-not $env:CLAUDE_PROXY_HOME) {
  $env:CLAUDE_PROXY_HOME = Join-Path $env:USERPROFILE ".claude-proxy-control"
}
. (Join-Path $PSScriptRoot "_env.ps1")

# Write-CpcTrace объявлена в Reload-VpnRoutes.ps1, а не в общем модуле, поэтому
# здесь своя короткая запись в тот же журнал.
function Write-CpcTrace([string]$Step, [string]$Message = "", [string]$Level = "INFO") {
  try {
    $dir = Join-Path $env:CLAUDE_PROXY_HOME "logs"
    if (-not (Test-Path $dir)) { [void](New-Item -ItemType Directory -Path $dir -Force) }
    $line = "{0} [KILLSWITCH] {1,-5} {2}  {3}" -f (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fff"), $Level, $Step, $Message
    Add-Content -Path (Join-Path $dir "cpc-trace.log") -Value $line -Encoding UTF8
  } catch {}
}

$rule = "CPC-KillSwitch-TunRebuild"
$existed = $false
try {
  $existed = [bool](Get-NetFirewallRule -DisplayName $rule -ErrorAction SilentlyContinue)
} catch {}

[void](Remove-CpcKillSwitchRule)

$still = $false
try {
  $still = [bool](Get-NetFirewallRule -DisplayName $rule -ErrorAction SilentlyContinue)
} catch {}

$ok = (-not $still)
Write-CpcTrace "killswitch.clear" ("existed=$existed removed=$ok")

$out = Join-Path $MergedDir "killswitch-clear-result.json"
try {
  (@{ ok = $ok; existed = $existed; time = (Get-Date).ToString("o") } | ConvertTo-Json) |
    Set-Content -Path $out -Encoding UTF8
} catch {}

if ($ok) {
  Write-Host "OK: kill-switch rule removed (existed=$existed)" -ForegroundColor Green
  exit 0
}
Write-Host "FAIL: kill-switch rule is still present" -ForegroundColor Red
exit 1
