# Script para instalar/reinstalar correctamente WinFSP para el Contenedor Cuántico
# Ejecutar como administrador

# Comprobar privilegios de administrador
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Warning "¡Este script requiere privilegios de administrador!"
    Write-Warning "Por favor, ejecute PowerShell como administrador e intente de nuevo."
    exit
}

Write-Host "=== Configuración de WinFSP ==="

# Verificar si WinFSP ya está instalado
$winfspKey = "HKLM:\SOFTWARE\WOW6432Node\WinFsp"
if (Test-Path $winfspKey) {
    Write-Host "✓ WinFSP ya está instalado."
} else {
    Write-Host "❌ WinFSP no está instalado. Descargando e instalando..."
    $installerUrl = "https://github.com/winfsp/winfsp/releases/latest/download/winfsp-1.12.22339.msi"
    $installerPath = "$env:TEMP\winfsp.msi"
    Invoke-WebRequest -Uri $installerUrl -OutFile $installerPath
    Start-Process msiexec.exe -ArgumentList "/i $installerPath /quiet /norestart" -Wait
    Remove-Item $installerPath
    Write-Host "✓ WinFSP instalado correctamente."
}

Write-Host "=== Configuración completada ==="

# Descargar la última versión de WinFSP
$downloadUrl = "https://github.com/winfsp/winfsp/releases/download/v1.12/winfsp-1.12.22035.msi"
$downloadPath = "$env:TEMP\winfsp-installer.msi"

Write-Host "Descargando WinFSP..." -ForegroundColor Cyan
Invoke-WebRequest -Uri $downloadUrl -OutFile $downloadPath

# Detener el servicio WinFSP Launcher si está en ejecución
Write-Host "Deteniendo el servicio WinFSP..." -ForegroundColor Cyan
Stop-Service -Name "WinFsp.Launcher" -Force -ErrorAction SilentlyContinue

# Desinstalar versión anterior si existe
$winFspInstalled = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*WinFsp*" }
if ($winFspInstalled) {
    Write-Host "Desinstalando versión anterior de WinFSP..." -ForegroundColor Yellow
    $winFspInstalled.Uninstall()
}

# Instalar nueva versión
Write-Host "Instalando WinFSP..." -ForegroundColor Green
Start-Process "msiexec.exe" -ArgumentList "/i `"$downloadPath`" /quiet /norestart" -Wait

# Iniciar el servicio
Write-Host "Iniciando el servicio WinFSP..." -ForegroundColor Cyan
Start-Service -Name "WinFsp.Launcher" -ErrorAction SilentlyContinue

# Verificar la instalación
$winFspPath = "C:\Program Files (x86)\WinFsp"
if (Test-Path $winFspPath) {
    Write-Host "¡WinFSP instalado correctamente!" -ForegroundColor Green
    Write-Host "Ruta de instalación: $winFspPath" -ForegroundColor Green
    
    # Agregar variable de entorno para el path
    $env:PATH = "$env:PATH;$winFspPath\bin"
    [Environment]::SetEnvironmentVariable("PATH", $env:PATH, "Machine")
    
    Write-Host "`nPara que el Contenedor Cuántico funcione correctamente:" -ForegroundColor Yellow
    Write-Host "1. Reinicie su computadora" -ForegroundColor Yellow
    Write-Host "2. Ejecute el programa como administrador" -ForegroundColor Yellow
} else {
    Write-Host "¡Error en la instalación de WinFSP!" -ForegroundColor Red
}

# Limpiar
Remove-Item $downloadPath -Force -ErrorAction SilentlyContinue
