@echo off
setlocal EnableExtensions EnableDelayedExpansion
cd /d "%~dp0"
echo ============================================================
echo  Shift plan deployment  (backup of /data, then upload)
echo ============================================================
if not exist deploy.ini (
  copy /y deploy.ini.sample deploy.ini >nul
  echo deploy.ini was created from the sample. Please open it, enter your WinSCP site name
  echo and the remote folder, save, and run deploy.cmd again.
  pause & exit /b 1
)
for /f "usebackq eol=; tokens=1,* delims==" %%A in ("deploy.ini") do set "%%A=%%B"
if not exist "%WINSCP%" (
  for %%P in ("C:\Program Files (x86)\WinSCP\WinSCP.com" "C:\Program Files\WinSCP\WinSCP.com" "%LOCALAPPDATA%\Programs\WinSCP\WinSCP.com") do if exist "%%~P" set "WINSCP=%%~P"
)
if not exist "%WINSCP%" ( echo WinSCP.com not found - set WINSCP in deploy.ini. & pause & exit /b 1 )
if not exist Shiftplan_web.zip ( echo Shiftplan_web.zip not found next to deploy.cmd. & pause & exit /b 1 )
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "TS=%%i"

echo [1/4] Unpacking Shiftplan_web.zip ...
if exist unpacked rd /s /q unpacked
powershell -NoProfile -Command "Expand-Archive -Path 'Shiftplan_web.zip' -DestinationPath 'unpacked' -Force" || ( echo Unpacking failed. & pause & exit /b 1 )
set "LOCALWEB=%~dp0unpacked\Shiftplan_web\web"
if not exist "%LOCALWEB%\index.php" ( echo Unexpected zip content. & pause & exit /b 1 )

set "BACKUP=%~dp0backups\data_%TS%"
if not exist backups mkdir backups
if not exist logs mkdir logs
mkdir "%BACKUP%"

echo [2/4] Writing WinSCP script ...
set "SCRIPT=%~dp0logs\deploy_%TS%.txt"
> "%SCRIPT%" echo option confirm off
>>"%SCRIPT%" echo option batch continue
>>"%SCRIPT%" echo open "%SESSION%"
>>"%SCRIPT%" echo echo --- backup of %REMOTE%/data to %BACKUP%
>>"%SCRIPT%" echo get -preservetime "%REMOTE%/data" "%BACKUP%\"
>>"%SCRIPT%" echo option batch abort
>>"%SCRIPT%" echo echo --- upload (config.php and data/ are never overwritten)
>>"%SCRIPT%" echo synchronize remote -criteria=either -filemask="|config.php;data/;deploy.ini" "%LOCALWEB%" "%REMOTE%"
if /i "%UPLOAD_CONFIG%"=="yes" >>"%SCRIPT%" echo put "%LOCALWEB%\config.php" "%REMOTE%/config.php"
>>"%SCRIPT%" echo exit

echo [3/4] Running WinSCP (site "%SESSION%", remote folder %REMOTE%) ...
"%WINSCP%" /script="%SCRIPT%" /log="%~dp0logs\winscp_%TS%.log" /loglevel=0
set "RC=%ERRORLEVEL%"

echo [4/4] Cleaning up ...
if "%KEEP_BACKUPS%" NEQ "0" (
  set /a N=0
  for /f "delims=" %%D in ('dir /b /ad /o-n backups') do (
    set /a N+=1
    if !N! GTR %KEEP_BACKUPS% rd /s /q "backups\%%D"
  )
)
rd /s /q unpacked
echo.
if "%RC%"=="0" (
  echo Done. Backup of /data: %BACKUP%
  echo The new version is on the server - open the login page to check.
) else (
  echo WinSCP reported an error (code %RC%). See logs\winscp_%TS%.log
)
pause
exit /b %RC%
