[CmdletBinding()]
param(
    [switch]$EliminarConfiguracion
)

Set-StrictMode -Version 2.0
$ErrorActionPreference = "Stop"

$nombreServicio = "AgenteMonitoreo"
$directorioPrograma = Join-Path $env:ProgramFiles "AgenteMonitoreo"
$directorioDatos = Join-Path $env:ProgramData "AgenteMonitoreo"

$identidad = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($identidad)

if (-not $principal.IsInRole(
    [Security.Principal.WindowsBuiltInRole]::Administrator
)) {
    throw "Ejecuta el desinstalador como administrador."
}

$servicio = Get-Service `
    -Name $nombreServicio `
    -ErrorAction SilentlyContinue

if ($servicio) {
    if ($servicio.Status -ne "Stopped") {
        Stop-Service -Name $nombreServicio -Force
        $servicio.WaitForStatus(
            [ServiceProcess.ServiceControllerStatus]::Stopped,
            [TimeSpan]::FromSeconds(20)
        )
    }

    & sc.exe delete $nombreServicio | Out-Null
    Start-Sleep -Seconds 2
}

@("AgenteMonitoreo") | ForEach-Object {
    & schtasks.exe /Delete /TN $_ /F 2>$null | Out-Null
}

@("AgenteMonitoreo") |
    ForEach-Object {
        Get-Process -Name $_ -ErrorAction SilentlyContinue |
            Stop-Process -Force
    }

if (Test-Path $directorioPrograma) {
    Remove-Item -Recurse -Force $directorioPrograma
}

if ($EliminarConfiguracion -and (Test-Path $directorioDatos)) {
    Remove-Item -Recurse -Force $directorioDatos
}

Write-Host "AgenteMonitoreo fue desinstalado." -ForegroundColor Green

if (-not $EliminarConfiguracion -and (Test-Path $directorioDatos)) {
    Write-Host (
        "Se conservaron la configuracion y los logs en: " +
        $directorioDatos
    ) -ForegroundColor Yellow
}
