@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul

REM Yatta Print Agent — Instalador completamente automático para Windows
REM ===================================================================
REM Este script GENERA automáticamente las credenciales, descarga NSSM,
REM configura el agente e instala el servicio.
REM EJECUCIÓN: botón derecho → Ejecutar como Administrador

title Instalador Yatta Print Agent
cls

REM ─── Verificar permisos de Administrador ───────────────────────────
net session >nul 2>&1
if %errorlevel% neq 0 (
  echo.
  echo ❌ ERROR: Este script DEBE ejecutarse como Administrador.
  echo    Botón derecho en el archivo → Ejecutar como Administrador
  echo.
  pause
  exit /b 1
)

echo ╔════════════════════════════════════════════════════════════════╗
echo ║     Yatta Print Agent — Instalador Windows (v1.0)             ║
echo ║     Este script instalará el agente como servicio de Windows  ║
echo ╚════════════════════════════════════════════════════════════════╝
echo.

REM ─── GENERAR IDS AUTOMÁTICAMENTE ──────────────────────────────────
echo [INIT] Generando credenciales y IDs...

REM Node ID basado en hostname
for /f "tokens=2 delims==" %%A in ('wmic os get computername /value') do set "HOSTNAME=%%A"
set "YATTA_NODE_ID=%HOSTNAME%-print-agent"

REM Token seguro y único (basado en hostname + timestamp)
setlocal enabledelayedexpansion
set "RAND=%RANDOM%%RANDOM%%RANDOM%"
set "YATTA_TOKEN=yatta_%HOSTNAME%_%RAND%"
set "YATTA_TOKEN=%YATTA_TOKEN:~0,48%"

echo ✅ NODE_ID: %YATTA_NODE_ID%
echo ✅ TOKEN:   %YATTA_TOKEN%
echo.

REM ─── IPs POR DEFECTO (edita si es necesario) ─────────────────────
set "PRINTER_IP_COCINA=192.168.1.100"
set "PRINTER_IP_BARRA=192.168.1.102"
set "PRINTER_IP_COCTELES=192.168.1.103"
set "PRINTER_PORT=9100"
REM ────────────────────────────────────────────────────────────────────

set "INSTALL_DIR=C:\yatta"
set "AGENT_FILE=%INSTALL_DIR%\print-agent.js"
set "NSSM_EXE=C:\Windows\System32\nssm.exe"
set "SERVICE_NAME=YattaPrint"
set "NODE_EXE=C:\Program Files\nodejs\node.exe"

echo [1/6] Verificando Node.js...
if not exist "%NODE_EXE%" (
  echo ❌ Node.js no está instalado en: %NODE_EXE%
  echo    Descárgalo desde: https://nodejs.org/en/download
  pause
  exit /b 1
)
echo ✅ Node.js encontrado: %NODE_EXE%
echo.

echo [2/6] Creando carpeta de instalación...
if not exist "%INSTALL_DIR%" mkdir "%INSTALL_DIR%"
echo ✅ Carpeta: %INSTALL_DIR%
echo.

echo [3/6] Descargando NSSM...
if exist "%NSSM_EXE%" (
  echo ✅ NSSM ya existe
) else (
  echo    Descargando NSSM 2.24 desde Github...
  powershell -Command "^
    $ProgressPreference = 'SilentlyContinue'; ^
    try { ^
      Invoke-WebRequest -Uri 'https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip' -OutFile '$env:TEMP\nssm.zip'; ^
      Expand-Archive -Path '$env:TEMP\nssm.zip' -DestinationPath '$env:TEMP\nssm' -Force; ^
      Copy-Item '$env:TEMP\nssm\nssm-2.24-101-g897c7ad\win64\nssm.exe' -Destination '%NSSM_EXE%' -Force; ^
      Remove-Item '$env:TEMP\nssm.zip' -Force -ErrorAction SilentlyContinue; ^
      echo '✅ NSSM descargado e instalado'; ^
    } catch { ^
      echo '❌ Error descargando NSSM. Descárgalo manualmente desde:'; ^
      echo '   https://nssm.cc/download'; ^
      echo '   y cópialo a: C:\Windows\System32\nssm.exe'; ^
      exit 1; ^
    } ^
  "
  if !errorlevel! neq 0 exit /b 1
)
echo.

echo [4/6] Copiar agente a la carpeta de instalación...
if exist "%AGENT_FILE%" (
  echo ℹ️  El archivo print-agent.js ya existe. Se mantendrá la versión existente.
) else (
  echo ❌ No se encuentra: print-agent.js
  echo    Coloca print-agent-production.js (renómbralo a print-agent.js) en:
  echo    %INSTALL_DIR%\
  echo    y ejecuta este script nuevamente.
  pause
  exit /b 1
)
echo ✅ Agente en: %AGENT_FILE%
echo.

echo [5/6] Deteniendo servicio anterior (si existe)...
nssm stop "%SERVICE_NAME%" >nul 2>&1
nssm remove "%SERVICE_NAME%" confirm >nul 2>&1
timeout /t 2 /nobreak >nul
echo ✅ Listo
echo.

echo [6/6] Instalando servicio "%SERVICE_NAME%"...
nssm install "%SERVICE_NAME%" "%NODE_EXE%" "%AGENT_FILE%"

echo Configurando variables de entorno del servicio...
nssm set "%SERVICE_NAME%" AppEnvironmentExtra ^
  YATTA_NODE_ID=%YATTA_NODE_ID% ^
  YATTA_TOKEN=%YATTA_TOKEN% ^
  PRINTER_IP_COCINA=%PRINTER_IP_COCINA% ^
  PRINTER_IP_BARRA=%PRINTER_IP_BARRA% ^
  PRINTER_IP_COCTELES=%PRINTER_IP_COCTELES% ^
  PRINTER_PORT=%PRINTER_PORT%

echo Configurando logs...
nssm set "%SERVICE_NAME%" AppStdout "%INSTALL_DIR%\yatta-print.log"
nssm set "%SERVICE_NAME%" AppStderr "%INSTALL_DIR%\yatta-print-error.log"
nssm set "%SERVICE_NAME%" AppRotateFiles 1
nssm set "%SERVICE_NAME%" AppRotateBytes 10485760

echo Configurando arranque automático...
nssm set "%SERVICE_NAME%" Start SERVICE_AUTO_START

echo Iniciando servicio...
nssm start "%SERVICE_NAME%"

echo.
echo ╔════════════════════════════════════════════════════════════════╗
echo ║        ✅ INSTALACIÓN COMPLETADA                              ║
echo ╚════════════════════════════════════════════════════════════════╝
echo.
echo 📍 Directorio de instalación: %INSTALL_DIR%
echo 📝 Logs: %INSTALL_DIR%\yatta-print.log
echo 🔑 Servicio: %SERVICE_NAME%
echo.
echo 🆔 CREDENCIALES GENERADAS:
echo    Node ID: %YATTA_NODE_ID%
echo    Token:   %YATTA_TOKEN%
echo.
echo GUARDA ESTAS CREDENCIALES EN UN LUGAR SEGURO.
echo Las necesitarás si quieres reconfigurar el agente.
echo.
echo PRÓXIMOS PASOS:
echo  1. Coloca print-agent-production.js en: %INSTALL_DIR%\print-agent.js
echo  2. Edita las IPs de impresora si es necesario
echo  3. El servicio debería estar corriendo
echo.
echo COMANDOS ÚTILES:
echo  Ver estado:   sc query YattaPrint
echo  Logs:         type "%INSTALL_DIR%\yatta-print.log"
echo  Detener:      nssm stop YattaPrint
echo  Reiniciar:    nssm restart YattaPrint
echo  Desinstalar:  nssm remove YattaPrint confirm
echo.
echo ⏳ El servicio debería estar corriendo en unos segundos...
timeout /t 3 /nobreak

REM Mostrar estado
cls
echo Estado del servicio %SERVICE_NAME%:
echo.
sc query "%SERVICE_NAME%"

pause
