# uninstall-gateway.ps1 —— 卸载 Windows 版 hd-gateway 服务。对齐 uninstall-gateway.sh。
#   .\uninstall-gateway.ps1           # 卸服务,保留数据(队列/配置/台账)
#   .\uninstall-gateway.ps1 -Purge    # 连数据目录一起删
#   .\uninstall-gateway.ps1 -InstallDir D:\hd-gateway   # 装在非默认磁盘且服务已被手工删掉时指定
param([switch]$Purge, [string]$InstallDir)
$ErrorActionPreference = 'Stop'

$SvcName = 'hd-gateway'

# 装在哪个盘由装机时决定,这里不能写死 C:\ProgramData —— 从已注册服务的 ImagePath 反推,
# 否则装在 D 盘的机器执行 -Purge 会删了个空的 C 盘目录,真数据原封不动留在 D 盘。
function Get-InstalledPrefix {
  try {
    $img = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\$SvcName" -ErrorAction Stop).ImagePath
    if ($img) {
      $exe = $null
      if ($img -match '^\s*"([^"]+)"') { $exe = $Matches[1] } elseif ($img -match '^\s*(\S+)') { $exe = $Matches[1] }
      if ($exe) { return (Split-Path -Parent $exe) }
    }
  } catch {}
  return $null
}

$Prefix = $InstallDir
if (-not $Prefix) { $Prefix = Get-InstalledPrefix }
if (-not $Prefix) { $Prefix = Join-Path $env:ProgramData 'hd-gateway' }
$Prefix = $Prefix.Trim().TrimEnd('\')
$Bin     = Join-Path $Prefix 'hd-gateway.exe'

$admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
         ).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if (-not $admin) { Write-Host '✗ 请以管理员身份运行' -ForegroundColor Red; exit 1 }

$svc = Get-Service -Name $SvcName -ErrorAction SilentlyContinue
if ($svc) {
  Write-Host '停止并移除服务…'
  try { Stop-Service $SvcName -Force -ErrorAction SilentlyContinue } catch {}
  # 优先用 exe 自带 remove(会清恢复策略);失败退回 sc.exe delete。
  if (Test-Path $Bin) { & $Bin remove 2>$null | Out-Null }
  if (Get-Service -Name $SvcName -ErrorAction SilentlyContinue) { & sc.exe delete $SvcName | Out-Null }
  Start-Sleep -Seconds 1
  Write-Host "  ✓ 服务 $SvcName 已卸载"
} else {
  Write-Host "  · 服务 $SvcName 未安装"
}

if ($Purge) {
  if (Test-Path $Prefix) { Remove-Item -Recurse -Force $Prefix; Write-Host "  ✓ 已删除数据目录 $Prefix" }
} else {
  Write-Host "  数据保留在 $Prefix(队列/配置/台账);彻底清理用 -Purge"
}
