@echo off
setlocal
title Instalador SolusysMobile - Servidor Central
color 0A

set SERVICE_NAME=SolusysMobile
set "BASE_DIR=%~dp0"
if "%BASE_DIR:~-1%"=="\" set "BASE_DIR=%BASE_DIR:~0,-1%"
set "NSSM_EXE=%BASE_DIR%\instalador\nssm.exe"

set "NODE_EXE=C:\Program Files\nodejs\node.exe"
if exist "C:\Program Files (x86)\nodejs\node.exe" set "NODE_EXE=C:\Program Files (x86)\nodejs\node.exe"
set "NPM_CMD=%NODE_EXE:node.exe=npm.cmd%"

echo ============================================
echo   SolusysMobile - Servidor Central
echo ============================================
echo.

net session >nul 2>&1
if %errorlevel% neq 0 (
  echo Este instalador precisa ser executado como Administrador.
  echo Clique com o botao direito em instalar_servico.bat e escolha "Executar como administrador".
  echo.
  pause
  exit /b 1
)

echo Verificando Node.js...
if not exist "%NODE_EXE%" (
  echo Node.js nao encontrado nesta maquina.
  echo Vou abrir a pagina de download -- instale a versao LTS e rode este instalador de novo.
  start https://nodejs.org/en/download
  pause
  exit /b 1
)
echo Node.js encontrado.

echo.
echo Verificando MariaDB (banco do SolusysMobile, porta 3307)...
sc query "MariaDBSolusysMobile" >nul 2>&1
if %errorlevel% neq 0 (
  echo [AVISO] Servico MariaDBSolusysMobile nao encontrado nesta maquina.
  echo Instale primeiro com "%BASE_DIR%\instalador\mariadb-11.8.8-winx64.msi"
  echo ^(porta 3307, banco "solusysmobile"^) e configure o .env antes de continuar.
  pause
  exit /b 1
)
echo MariaDB encontrado.

if not exist "%BASE_DIR%\server.js" (
  echo [ERRO] server.js nao encontrado em:
  echo %BASE_DIR%
  pause
  exit /b 1
)

if not exist "%BASE_DIR%\.env" (
  echo [AVISO] .env nao encontrado em %BASE_DIR%
  echo Copie o .env.example, preencha as credenciais do MariaDB/porta/admin
  echo e rode este instalador de novo.
  pause
  exit /b 1
)

if not exist "%NSSM_EXE%" (
  echo [ERRO] NSSM nao encontrado em:
  echo %NSSM_EXE%
  pause
  exit /b 1
)

echo.
echo Liberando porta 4000 no firewall...
netsh advfirewall firewall add rule name="SolusysMobile 4000 TCP" dir=in action=allow protocol=TCP localport=4000 >nul 2>&1
netsh advfirewall firewall add rule name="SolusysMobile 4000 UDP" dir=in action=allow protocol=UDP localport=4000 >nul 2>&1
echo Firewall configurado.

echo.
echo Instalando dependencias...
cd /d "%BASE_DIR%"
call "%NPM_CMD%" install
if errorlevel 1 (
  echo [ERRO] Falha no npm install.
  pause
  exit /b 1
)

echo.
echo Removendo servico antigo (se existir)...
sc query "%SERVICE_NAME%" >nul 2>&1
if %errorlevel%==0 (
  net stop "%SERVICE_NAME%" >nul 2>&1
  "%NSSM_EXE%" remove "%SERVICE_NAME%" confirm >nul 2>&1
  timeout /t 2 >nul
)

echo.
echo Instalando servico...
"%NSSM_EXE%" install "%SERVICE_NAME%" "%NODE_EXE%" "%BASE_DIR%\server.js"
"%NSSM_EXE%" set "%SERVICE_NAME%" AppDirectory "%BASE_DIR%"
"%NSSM_EXE%" set "%SERVICE_NAME%" Start SERVICE_AUTO_START
"%NSSM_EXE%" set "%SERVICE_NAME%" AppExit Default Restart
"%NSSM_EXE%" set "%SERVICE_NAME%" AppStdout "%BASE_DIR%\service-out.log"
"%NSSM_EXE%" set "%SERVICE_NAME%" AppStderr "%BASE_DIR%\service-err.log"

echo.
echo Iniciando servico...
net start "%SERVICE_NAME%"
if errorlevel 1 (
  echo [ERRO] Servico nao iniciou. Confira %BASE_DIR%\service-err.log
  pause
  exit /b 1
)

echo.
echo ============================================
echo   INSTALADO COM SUCESSO
echo ============================================
echo O SolusysMobile agora roda como servico do Windows
echo (nome: %SERVICE_NAME%) e vai subir sozinho sempre
echo que este PC ligar.
echo.
start http://localhost:4000
exit /b 0
