@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
 
:: ============================
:: SAMO Backend Installation Script (WinSW)
:: ============================
 
:: === CONFIGURATION ===
set "SAMO_PACKAGES_ROOT=C:\samo\configuration"
set "ENV_PROPERTIES=C:\samo\environment\environment.properties;C:\samo\environment\ivp-samo-as1.properties"
set "SAMO_DATA_ROOT=C:\samo\data"
set "LIDS_MICROSOFTIDM_CLIENT_SECRET=L~jAiy~e3Y55f9GYGqdNLW5HVAHxs.6NX."
set "DATA_SOURCE_PASSWORD=LIDSDEMODEV"
 
set "SERVICE_PREFIX=samo-2-"
set "JAVA_HOME=C:\Program Files\Java\jdk-17"
set "JAVA_EXE=%JAVA_HOME%\bin\java.exe"
 
:: === LOG DIRECTORY ===
set "LOG_DIR=C:\samo\logs"
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
 
:: === WinSW CHECK ===
set "SCRIPT_DIR=%~dp0"
set "WINSW_EXE=%SCRIPT_DIR%WinSW-x64.exe"
if not exist "%WINSW_EXE%" (
    echo [ERROR] WinSW not found in the script folder.
    pause
    exit /b 1
)
 
:: === CHECK FOR JAR FILES ===
pushd "%SCRIPT_DIR%"
dir /b *.jar >nul 2>&1
if errorlevel 1 (
    echo [ERROR] No JAR files found in "%SCRIPT_DIR%".
    pause
    exit /b 1
)
 
echo ============================================
echo Installing SAMO backend components as WinSW services
echo ============================================
 
:: === LOOP THROUGH ALL JAR FILES ===
for %%J in (*.jar) do (
    set "JAR_FILE=%SCRIPT_DIR%%%~nxJ"
    set "JAR_NAME=%%~nJ"
    set "SERVICE_NAME=%SERVICE_PREFIX%!JAR_NAME!"
    set "SERVICE_DIR=%SCRIPT_DIR%!JAR_NAME!"
    set "XML_FILE=!SERVICE_DIR!\!JAR_NAME!.xml"
    set "SERVICE_EXE=!SERVICE_DIR!\!JAR_NAME!.exe"
    set "SERVICE_LOG_DIR=%LOG_DIR%\!JAR_NAME!"
 
    echo.
    echo --------------------------------------------
    echo Processing service: !SERVICE_NAME!
    echo --------------------------------------------
 
    if not exist "!SERVICE_DIR!" mkdir "!SERVICE_DIR!"
    copy /y "%WINSW_EXE%" "!SERVICE_EXE!" >nul
 
    sc query "!SERVICE_NAME!" >nul 2>&1
    if !errorlevel! equ 0 (
        echo Service !SERVICE_NAME! exists — stopping and deleting...
        sc stop "!SERVICE_NAME!" >nul 2>&1
        timeout /t 3 >nul
        sc delete "!SERVICE_NAME!" >nul 2>&1
        timeout /t 2 >nul
    )
 
    echo Clearing old logs for !JAR_NAME!...
    if not exist "!SERVICE_LOG_DIR!" mkdir "!SERVICE_LOG_DIR!"
    del /q "!SERVICE_LOG_DIR!\*.*" >nul 2>&1
 
    (
        echo ^<service^>
        echo   ^<id^>!SERVICE_NAME!^</id^>
        echo   ^<name^>!SERVICE_NAME!^</name^>
        echo   ^<description^>SAMO Backend Component: !JAR_NAME!^</description^>
        echo   ^<executable^>"%JAVA_EXE%"^</executable^>
        echo   ^<arguments^>-Xmx1024m -Dsamo_packages_root="!SAMO_PACKAGES_ROOT!" -Dsamo_env_configuration="!ENV_PROPERTIES!" -Dsamo_data_root="!SAMO_DATA_ROOT!" -Dlids.microsoftIDM.client_secret="!LIDS_MICROSOFTIDM_CLIENT_SECRET!" -DdataSource.password="!DATA_SOURCE_PASSWORD!" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9211 -jar "!JAR_FILE!"^</arguments^>
        echo   ^<logpath^>!SERVICE_LOG_DIR!^</logpath^>
        echo   ^<log mode="roll" pattern="yyyyMMdd-HHmm"/^>
        echo   ^<onfailure action="restart" delay="5 sec"/^>
        echo   ^<startmode^>Automatic^</startmode^>
        echo ^</service^>
    ) > "!XML_FILE!"
 
    echo Installing service !SERVICE_NAME!...
    pushd "!SERVICE_DIR!" >nul
    "!SERVICE_EXE!" install
    popd >nul
 
    echo Starting service !SERVICE_NAME!...
    sc start "!SERVICE_NAME!" >nul 2>&1
    if !errorlevel! neq 0 (
        echo [WARNING] Could not start service !SERVICE_NAME!. Check logs.
    ) else (
        echo Service !SERVICE_NAME! started successfully.
    )
)
 
popd
 
echo.
echo ============================================
echo All SAMO backend services have been installed, updated, and started.
echo ============================================
pause
endlocal