@echo off
REM ========================================================================
REM  build-proserve-zip.bat
REM  Crée le ZIP de release d'une version PROSERVE prêt à uploader sur OVH.
REM
REM  Usage :
REM    build-proserve-zip.bat 1.5.3
REM
REM  Le script :
REM    1. Lit version\proserve-X.Y.Z\  (binaires UE5 + _migrations\ + _report\)
REM    2. Compresse en version\proserve-X.Y.Z.zip
REM    3. Affiche taille + SHA-256 (à recopier dans le backoffice si tu veux
REM       eviter le hash automatique côté serveur, sinon laisse le serveur le
REM       faire au moment du « Hasher + signer »)
REM
REM  Outils :
REM    - 7-Zip si installé (multi-threading, ~3-5x plus rapide sur 14 Go)
REM    - PowerShell Compress-Archive en fallback (mono-thread, lent)
REM
REM  Sortie : version\proserve-X.Y.Z.zip à uploader vers
REM           www/PS_Launcher/builds/proserve-X.Y.Z.zip via SFTP.
REM ========================================================================

setlocal EnableDelayedExpansion

if "%~1"=="" (
    echo.
    echo Usage : build-proserve-zip.bat ^<version^>
    echo Exemple : build-proserve-zip.bat 1.5.3
    echo.
    echo Versions disponibles dans version\ :
    for /D %%D in ("%~dp0version\proserve-*") do echo   %%~nxD
    echo.
    exit /b 1
)

set "VERSION=%~1"
set "REPO=%~dp0"
set "SRC=%REPO%version\proserve-%VERSION%"
set "OUT=%REPO%version\proserve-%VERSION%.zip"

if not exist "%SRC%" (
    echo [ERREUR] Dossier source introuvable : %SRC%
    echo Liste des versions disponibles :
    for /D %%D in ("%REPO%version\proserve-*") do echo   %%~nxD
    exit /b 1
)

REM Sanity-check que les sous-dossiers attendus sont là
if not exist "%SRC%\PROSERVE_UE_5_5.exe" (
    echo [WARN] %SRC%\PROSERVE_UE_5_5.exe absent — c'est normal ? Continuer dans 5s, Ctrl+C pour annuler...
    timeout /t 5 >nul
)
if not exist "%SRC%\_migrations" (
    echo [WARN] %SRC%\_migrations\ absent — pas de migrations DB dans cette release.
)
if not exist "%SRC%\_report" (
    echo [WARN] %SRC%\_report\ absent — pas d'outil Report dans cette release.
)

if exist "%OUT%" (
    echo [INFO] Suppression du zip existant : %OUT%
    del /Q "%OUT%"
)

REM ----- 7-Zip si disponible -----
set "SEVENZIP="
if exist "C:\Program Files\7-Zip\7z.exe" set "SEVENZIP=C:\Program Files\7-Zip\7z.exe"
if exist "C:\Program Files (x86)\7-Zip\7z.exe" set "SEVENZIP=C:\Program Files (x86)\7-Zip\7z.exe"

echo.
echo ========================================================================
echo  Compression de proserve-%VERSION% (peut prendre 5-30 min selon la taille)
echo  Source : %SRC%
echo  Sortie : %OUT%
echo ========================================================================
echo.

if defined SEVENZIP (
    echo [INFO] Utilisation de 7-Zip multi-thread (rapide)
    REM -tzip   format ZIP standard ^(compatible avec ce que le launcher attend^)
    REM -mx=5   compression normale ^(mx=9 ultra serait 2x plus lent pour ~5%% de gain^)
    REM -mmt=on multi-thread
    REM -bsp1   progress sur stderr
    REM Le * en fin de chemin source = on zippe le CONTENU du dossier, pas le dossier lui-meme
    "%SEVENZIP%" a -tzip -mx=5 -mmt=on -bsp1 "%OUT%" "%SRC%\*"
    set "EXITCODE=!ERRORLEVEL!"
) else (
    echo [INFO] 7-Zip non trouve, fallback sur PowerShell Compress-Archive ^(lent^).
    echo        Pour accelerer, installe 7-Zip depuis https://www.7-zip.org/
    echo.
    powershell -NoProfile -ExecutionPolicy Bypass -Command ^
      "Compress-Archive -Path '%SRC%\*' -DestinationPath '%OUT%' -CompressionLevel Optimal -Force"
    set "EXITCODE=!ERRORLEVEL!"
)

if !EXITCODE! NEQ 0 (
    echo.
    echo [ECHEC] Compression echouee avec le code !EXITCODE!.
    exit /b !EXITCODE!
)

if not exist "%OUT%" (
    echo [ECHEC] Le fichier %OUT% n'a pas ete cree.
    exit /b 1
)

echo.
echo ========================================================================
echo  [OK] Zip cree avec succes
echo ========================================================================
echo.
echo Fichier : %OUT%
for %%I in ("%OUT%") do (
    set "SIZE=%%~zI"
    echo Taille  : !SIZE! octets ^(~%%~zI bytes^)
)

echo.
echo Calcul du SHA-256 ^(peut prendre 30s-2min selon la taille^)...
powershell -NoProfile -Command ^
  "$h = (Get-FileHash '%OUT%' -Algorithm SHA256).Hash.ToLower(); Write-Host SHA-256 : $h"

echo.
echo ========================================================================
echo  Prochaines etapes :
echo  1. SFTP upload vers : www/PS_Launcher/builds/proserve-%VERSION%.zip
echo  2. Backoffice -^> Versions -^> verifier que l'entree v%VERSION% existe
echo     ^(sinon ajoute-la avec date d'expiration min_license_date^)
echo  3. Cliquer ligne v%VERSION% -^> bouton "Hasher cette version"
echo     ^(ou bouton global "Hasher les versions + signer"^)
echo  4. Le manifest est re-signe Ed25519, les clients verront la version
echo     au prochain "Verifier les MAJ".
echo ========================================================================
echo.
endlocal
pause
