@echo off
setlocal EnableExtensions

REM edited by glg
REM Compile aplikasi Python menjadi EXE menggunakan app.spec.
REM Pemakaian:
REM   build_exe.bat
REM   build_exe.bat dev full
REM Arg1: build mode   -> prod (default) | dev
REM Arg2: build profile-> minimal (default) | full

cd /d "%~dp0"

set "BUILD_MODE=%~1"
if "%BUILD_MODE%"=="" set "BUILD_MODE=prod"

set "BUILD_PROFILE=%~2"
if "%BUILD_PROFILE%"=="" set "BUILD_PROFILE=minimal"

if /I not "%BUILD_MODE%"=="prod" if /I not "%BUILD_MODE%"=="dev" (
    echo [ERROR] build mode tidak valid: %BUILD_MODE%
    echo [INFO] Gunakan: prod atau dev
    exit /b 1
)

if /I not "%BUILD_PROFILE%"=="minimal" if /I not "%BUILD_PROFILE%"=="full" (
    echo [ERROR] build profile tidak valid: %BUILD_PROFILE%
    echo [INFO] Gunakan: minimal atau full
    exit /b 1
)

set "PYTHON_EXE="
if exist ".venv\Scripts\python.exe" (
    set "PYTHON_EXE=.venv\Scripts\python.exe"
) else (
    where py >nul 2>&1
    if %errorlevel%==0 (
        set "PYTHON_EXE=py -3"
    ) else (
        where python >nul 2>&1
        if %errorlevel%==0 (
            set "PYTHON_EXE=python"
        )
    )
)

if "%PYTHON_EXE%"=="" (
    echo [ERROR] Python tidak ditemukan.
    exit /b 1
)

if not exist "app.spec" (
    echo [ERROR] app.spec tidak ditemukan di folder project.
    exit /b 1
)

echo [INFO] Python: %PYTHON_EXE%
echo [INFO] Mode: %BUILD_MODE%
echo [INFO] Profile: %BUILD_PROFILE%

set "POSAPP_BUILD_MODE=%BUILD_MODE%"
set "POSAPP_BUILD_PROFILE=%BUILD_PROFILE%"

echo [INFO] Membersihkan folder build/dist lama...
if exist "build" rmdir /s /q "build"
if exist "dist" rmdir /s /q "dist"

echo [INFO] Menjalankan PyInstaller...
call %PYTHON_EXE% -m PyInstaller --noconfirm --clean app.spec
if errorlevel 1 (
    echo [ERROR] Build gagal.
    exit /b 1
)

REM edited by glg
REM Validasi output wajib agar installer tidak mengambil paket build yang tidak lengkap.
if not exist "dist\POSApp\POSApp.exe" (
    echo [ERROR] Output EXE tidak ditemukan: dist\POSApp\POSApp.exe
    exit /b 1
)

if not exist "dist\POSApp\_internal\config.json" (
    echo [ERROR] Output config seed tidak ditemukan: dist\POSApp\_internal\config.json
    echo [ERROR] Pastikan app.spec tetap menyertakan config.json ke bundle.
    exit /b 1
)

for %%I in ("dist\POSApp\POSApp.exe") do (
    echo [INFO] EXE timestamp: %%~tI
    echo [INFO] EXE size_bytes: %%~zI
)

where certutil >nul 2>&1
if %errorlevel%==0 (
    echo [INFO] EXE SHA256:
    certutil -hashfile "dist\POSApp\POSApp.exe" SHA256
)

echo.
echo [SUKSES] Build selesai.
echo [OUTPUT] dist\POSApp\POSApp.exe
exit /b 0
