@echo off
setlocal EnableExtensions

set "DEFAULT_DIR=C:\TMarketPOS"
set "DEFAULT_PORT=3030"
set "INSTALL_DIR=%DEFAULT_DIR%"
set "PORT=%DEFAULT_PORT%"
set "RESTORE_PATH="

title Instalador T Market POS Servidor

:MENU
cls
echo.
echo ============================================================
echo              T MARKET POS - INSTALADOR SERVIDOR
echo ============================================================
echo.
echo  Elige que quieres hacer:
echo.
echo   1. Actualizar sistema del servidor
echo      - Copia la nueva version del programa.
echo      - Conserva base de datos, licencia y respaldos.
echo.
echo   2. Instalar limpio / nueva PC
echo      - No copia bases de datos externas.
echo      - Si ya existe C:\TMarketPOS\data, la conserva y respalda.
echo.
echo   3. Migrar servidor / restaurar respaldo
echo      - Usa un archivo .sqlite o una carpeta data de otra PC.
echo.
echo   4. Salir
echo.
choice /C 1234 /N /M "Selecciona una opcion [1-4]: "
if errorlevel 4 goto END
if errorlevel 3 goto RESTORE_MODE
if errorlevel 2 goto CLEAN_MODE
if errorlevel 1 goto UPDATE_MODE

:COMMON_OPTIONS
echo.
echo ------------------------------------------------------------
echo  Configuracion
echo ------------------------------------------------------------
set /p INSTALL_DIR=Carpeta de instalacion [%DEFAULT_DIR%]: 
if "%INSTALL_DIR%"=="" set "INSTALL_DIR=%DEFAULT_DIR%"

set /p PORT=Puerto del servidor [%DEFAULT_PORT%]: 
if "%PORT%"=="" set "PORT=%DEFAULT_PORT%"

set "STARTUP_SWITCH="
choice /C SN /N /M "Iniciar servidor con Windows? [S/N]: "
if errorlevel 2 goto FIREWALL_ASK
set "STARTUP_SWITCH=-StartWithWindows"

:FIREWALL_ASK
set "FIREWALL_SWITCH="
choice /C SN /N /M "Preparar red/firewall para otras PCs? [S/N]: "
if errorlevel 2 goto NODE_ASK
set "FIREWALL_SWITCH=-OpenFirewall"

:NODE_ASK
set "NODE_SWITCH="
choice /C SN /N /M "Si falta Node.js, instalarlo con winget? [S/N]: "
if errorlevel 2 goto START_ASK
set "NODE_SWITCH=-InstallNodeIfMissing"

:START_ASK
set "STARTNOW_SWITCH="
choice /C SN /N /M "Iniciar servidor al terminar? [S/N]: "
if errorlevel 2 goto RUN_INSTALL
set "STARTNOW_SWITCH=-StartNow"
goto RUN_INSTALL

:CLEAN_MODE
cls
echo.
echo ============================================================
echo  INSTALACION LIMPIA / NUEVA PC
echo ============================================================
echo.
echo  Importante:
echo  - En una PC nueva llegara limpio, sin tus productos.
echo  - Si ya existe una base en la carpeta elegida, se conserva.
echo  - No se buscara ni copiara ninguna base externa.
echo.
set "RESTORE_PATH="
set "UPDATE_SWITCH="
goto COMMON_OPTIONS

:UPDATE_MODE
cls
echo.
echo ============================================================
echo  ACTUALIZAR SISTEMA DEL SERVIDOR
echo ============================================================
echo.
echo  Este modo NO desinstala y NO borra datos.
echo.
echo  Se conserva:
echo  - Base de datos: data\tmarket.sqlite
echo  - Licencia: data\license.json
echo  - Respaldos: backups
echo  - Configuracion local
echo.
echo  Antes de copiar archivos nuevos se creara un respaldo automatico.
echo.
set "RESTORE_PATH="
set "UPDATE_SWITCH=-UpdateOnly"
goto COMMON_OPTIONS

:RESTORE_MODE
cls
echo.
echo ============================================================
echo  MIGRAR SERVIDOR / RESTAURAR RESPALDO
echo ============================================================
echo.
echo  Pega la ruta de un respaldo .sqlite o una carpeta data.
echo  Ejemplos:
echo    D:\Respaldos\tmarket.sqlite
echo    C:\TMarketPOS\data
echo.
set /p RESTORE_PATH=Ruta de respaldo: 
if "%RESTORE_PATH%"=="" (
    echo.
    echo No escribiste respaldo. Regresando al menu...
    pause
    goto MENU
)
goto COMMON_OPTIONS

:RUN_INSTALL
cls
echo.
echo ============================================================
echo  RESUMEN
echo ============================================================
echo.
echo  Carpeta: %INSTALL_DIR%
echo  Puerto:  %PORT%
if "%RESTORE_PATH%"=="" (
    if "%UPDATE_SWITCH%"=="" (
        echo  Modo:    Instalacion limpia / nueva PC
    ) else (
        echo  Modo:    Actualizar sistema del servidor
    )
    echo  Datos:   No se copiara base externa
) else (
    echo  Modo:    Restaurar respaldo / migracion
    echo  Respaldo: %RESTORE_PATH%
)
echo.
choice /C SN /N /M "Continuar con la instalacion? [S/N]: "
if errorlevel 2 goto MENU

echo.
echo Instalando, espera un momento...
echo.
if "%RESTORE_PATH%"=="" (
    powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0instalar-servidor-tmarket.ps1" -InstallDir "%INSTALL_DIR%" -Port %PORT% %UPDATE_SWITCH% %STARTUP_SWITCH% %FIREWALL_SWITCH% %NODE_SWITCH% %STARTNOW_SWITCH%
) else (
    powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0instalar-servidor-tmarket.ps1" -InstallDir "%INSTALL_DIR%" -Port %PORT% %STARTUP_SWITCH% %FIREWALL_SWITCH% %NODE_SWITCH% %STARTNOW_SWITCH% -RestoreBackupPath "%RESTORE_PATH%"
)

echo.
echo ============================================================
echo  Proceso terminado.
echo ============================================================
echo.
pause
goto END

:END
endlocal
