$ErrorActionPreference = "Stop"

$projectDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$solutionDir = Split-Path -Parent $projectDir
$msbuild = "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
$packageRoot = Join-Path $projectDir "publish\PaqueteCliente"
$appDir = Join-Path $packageRoot "app"
$sdkSource = Join-Path $projectDir "Standalone SDK-6.3.1.55\SDK\x86"
$sdkDest = Join-Path $appDir "SDK_ZKTeco_x86"
$configSource = Join-Path $projectDir "ConfiguracionCliente"
$configDest = Join-Path $appDir "ConfiguracionCliente"
$outputDir = Join-Path $projectDir "bin\Release"

if (!(Test-Path $msbuild)) {
    throw "No se encontro MSBuild en: $msbuild"
}

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

New-Item -ItemType Directory -Path $appDir | Out-Null

Push-Location $solutionDir
try {
    & $msbuild "checador.sln" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal
    if ($LASTEXITCODE -ne 0) {
        throw "MSBuild termino con codigo $LASTEXITCODE"
    }
}
finally {
    Pop-Location
}

robocopy $outputDir $appDir /E /XD "app.publish" /XF "*.pdb" "*.vshost.*" | Out-Null
if ($LASTEXITCODE -ge 8) {
    throw "Robocopy fallo copiando salida compilada. Codigo: $LASTEXITCODE"
}

New-Item -ItemType Directory -Path $sdkDest -Force | Out-Null
Copy-Item (Join-Path $sdkSource "*.dll") $sdkDest -Force

New-Item -ItemType Directory -Path $configDest -Force | Out-Null
Copy-Item (Join-Path $configSource "cadena.var") $configDest -Force

Copy-Item (Join-Path $projectDir "instalar_cliente_admin.bat") $appDir -Force
Copy-Item (Join-Path $projectDir "registrar_sdk_zkteco_x86_admin.bat") $appDir -Force

$readme = @"
INSTALACION EN CLIENTE

1. Copia o extrae la carpeta completa 'app' a la computadora cliente.
   Importante: no copies solo el archivo .bat; debe ir toda la carpeta con checador.exe.
2. En la computadora cliente, abre 'app\instalar_cliente_admin.bat' como Administrador.
3. El instalador copia la aplicacion a C:\checador.
4. El instalador crea/actualiza C:\ruta\cadena.var.
5. El instalador registra el SDK ZKTeco x86 para leer checadores.

Archivo de conexion:
C:\ruta\cadena.var

Formato:
linea 1 = servidor MySQL
linea 2 = puerto
linea 3 = usuario
linea 4 = password
"@

Set-Content -Path (Join-Path $packageRoot "LEEME_INSTALACION.txt") -Value $readme -Encoding ASCII

Write-Host "Paquete generado en:"
Write-Host $packageRoot
