@echo off
setlocal EnableDelayedExpansion
title Configurador de Estacion Cliente - SEPFAR ERP
color 1F

echo ===============================================================================
echo                SEPFAR ERP - CONFIGURADOR DE CLIENTE (WINDOWS)
echo                       Servidor: https://e777.com.ar
echo ===============================================================================
echo.

:: 1. DETECTAR JAVA 8 DE 32 BITS (x86)
echo [*] Paso 1: Buscando instalacion de Java 8 (32 bits)...
set "JAVAWS="

:: Buscar en Program Files (x86)\Java\jre*
if exist "%ProgramFiles(x86)%\Java" (
    for /d %%i in ("%ProgramFiles(x86)%\Java\jre*") do (
        if exist "%%i\bin\javaws.exe" set "JAVAWS=%%i\bin\javaws.exe"
    )
)

:: Buscar en Program Files\Java (por si Windows es de 32 bits nativo)
if not defined JAVAWS (
    if exist "%ProgramFiles%\Java" (
        for /d %%i in ("%ProgramFiles%\Java\jre*") do (
            if exist "%%i\bin\javaws.exe" set "JAVAWS=%%i\bin\javaws.exe"
        )
    )
)

:: Buscar por el registro de Windows de 32 bits
if not defined JAVAWS (
    for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment" /v CurrentVersion 2^>nul') do (
        set "JRE_VER=%%b"
    )
    if defined JRE_VER (
        for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\!JRE_VER!" /v JavaHome 2^>nul') do (
            if exist "%%b\bin\javaws.exe" set "JAVAWS=%%b\bin\javaws.exe"
        )
    )
)

if not defined JAVAWS (
    echo.
    echo [ERROR] No se encontro Java Runtime Environment (JRE) de 32 bits instalado.
    echo.
    echo   IMPORTANTE: SEPFAR requiere estrictamente Java 8 de 32 bits (x86)
    echo   debido a las librerias nativas de interfaz SWT.
    echo.
    echo   Por favor instale: "jre-8uXXX-windows-i586.exe" y vuelva a ejecutar este script.
    echo.
    pause
    exit /b 1
)

echo [OK] Java 32-bit encontrado en:
echo      "!JAVAWS!"
echo.

:: 2. CONFIGURAR EXCEPCIONES DE SEGURIDAD DE JAVA
echo [*] Paso 2: Configurando excepciones de seguridad en Java...
set "DEPLOY_DIR=%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\security"
if not exist "!DEPLOY_DIR!" mkdir "!DEPLOY_DIR!"

set "SITES_FILE=!DEPLOY_DIR!\exception.sites"
if not exist "!SITES_FILE!" type nul > "!SITES_FILE!"

findstr /C:"https://e777.com.ar" "!SITES_FILE!" >nul 2>&1
if !ERRORLEVEL! neq 0 (
    echo https://e777.com.ar>> "!SITES_FILE!"
)

findstr /C:"http://e777.com.ar:8080" "!SITES_FILE!" >nul 2>&1
if !ERRORLEVEL! neq 0 (
    echo http://e777.com.ar:8080>> "!SITES_FILE!"
)

findstr /C:"https://e777.com.ar:8080" "!SITES_FILE!" >nul 2>&1
if !ERRORLEVEL! neq 0 (
    echo https://e777.com.ar:8080>> "!SITES_FILE!"
)

echo [OK] Sitios de confianza registrados en exception.sites.
echo.

:: 3. ASOCIAR ARCHIVOS .JNLP A JAVA WEB START (HKCU - Sin necesidad de administrador)
echo [*] Paso 3: Asociando archivos .jnlp a Java Web Start...
reg add "HKCU\Software\Classes\.jnlp" /ve /t REG_SZ /d "JNLPFile" /f >nul 2>&1
reg add "HKCU\Software\Classes\JNLPFile" /ve /t REG_SZ /d "Java Web Start Application" /f >nul 2>&1
reg add "HKCU\Software\Classes\JNLPFile\shell\open\command" /ve /t REG_SZ /d "\"!JAVAWS!\" \"%%1\"" /f >nul 2>&1

:: Si tiene privilegios de administrador, asociar tambien a nivel de sistema
assoc .jnlp=JNLPFile >nul 2>&1
ftype JNLPFile="!JAVAWS!" "%%1" >nul 2>&1

echo [OK] Extension .jnlp vinculada a javaws.exe.
echo.

:: 4. LIMPIAR CACHE DE JAVA WEB START
echo [*] Paso 4: Limpiando cache previa de Java Web Start...
"!JAVAWS!" -clearcache >nul 2>&1
echo [OK] Cache de Java limpia.
echo.

:: 5. CREAR ACCESOS DIRECTOS EN EL ESCRITORIO
echo [*] Paso 5: Creando accesos directos en el Escritorio...

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$ws = New-Object -ComObject WScript.Shell; " ^
    "$desk = [System.Environment]::GetFolderPath('Desktop'); " ^
    "$sc1 = $ws.CreateShortcut(\"$desk\SEPFAR - Portal Web.url\"); " ^
    "$sc1.TargetPath = 'https://e777.com.ar/'; " ^
    "$sc1.Save(); " ^
    "$sc2 = $ws.CreateShortcut(\"$desk\SEPFAR - Produccion.lnk\"); " ^
    "$sc2.TargetPath = '!JAVAWS!'; " ^
    "$sc2.Arguments = 'https://e777.com.ar/productionMgt.jnlp'; " ^
    "$sc2.Description = 'SEPFAR ERP - Modulo de Produccion'; " ^
    "$sc2.Save(); "

echo [OK] Accesos directos creados en el Escritorio:
echo      - SEPFAR - Portal Web
echo      - SEPFAR - Produccion
echo.

:: 6. VERIFICAR CONECTIVIDAD CON EL SERVIDOR
echo [*] Paso 6: Verificando conectividad hacia e777.com.ar...
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$ports = @(443, 1099, 3873); " ^
    "$allOk = $true; " ^
    "foreach ($p in $ports) { " ^
    "    try { " ^
    "        $client = New-Object System.Net.Sockets.TcpClient; " ^
    "        $ar = $client.BeginConnect('e777.com.ar', $p, $null, $null); " ^
    "        $wait = $ar.AsyncWaitHandle.WaitOne(2000, $false); " ^
    "        if ($wait -and $client.Connected) { " ^
    "            Write-Host \"    [OK] Puerto $p alcanzable.\" -ForegroundColor Green; " ^
    "            $client.EndConnect($ar); " ^
    "        } else { " ^
    "            Write-Host \"    [ALERTA] Puerto $p no responde.\" -ForegroundColor Yellow; " ^
    "            $allOk = $false; " ^
    "        } " ^
    "        $client.Close(); " ^
    "    } catch { " ^
    "        Write-Host \"    [ALERTA] Error probando puerto $p: $_\" -ForegroundColor Yellow; " ^
    "        $allOk = $false; " ^
    "    } " ^
    "}; " ^
    "if ($allOk) { Write-Host '    [OK] Conectividad completa con el servidor.' -ForegroundColor Green; }"

echo.
echo ===============================================================================
echo             CONFIGURACION DE LA ESTACION CLIENTE COMPLETADA CON EXITO
echo ===============================================================================
echo.
echo Ya puede ejecutar SEPFAR haciendo doble clic en el acceso directo del Escritorio:
echo "SEPFAR - Produccion" o accediendo al portal web.
echo.
pause
