@echo off
setlocal enabledelayedexpansion

:: ==============================
:: Configuratie
:: ==============================
set BIN_DIR=bin
set DEFAULT_BAUD=921600
set SLOW_BAUD=115200
set MAX_RETRIES=3

:: ==============================
:: COM-poort invoer
:: ==============================
echo Beschikbare COM-poorten:
wmic path Win32_SerialPort get DeviceID,Description
echo.
set /p PORT=Voer COM-poort in (bijv 3): 

:: Voeg automatisch COM toe als gebruiker alleen een nummer geeft
echo %PORT% | findstr /R /C:"^COM" >nul
if errorlevel 1 set PORT=COM%PORT%

:: ==============================
:: Controleer alle .bin bestanden
:: ==============================
for %%F in (%BIN_DIR%\bootloader.bin %BIN_DIR%\partitions.bin %BIN_DIR%\boot_app0.bin %BIN_DIR%\firmware.bin) do (
    if not exist %%F (
        echo FOUT: Bestand ontbreekt: %%F
        pause
        exit /b 1
    )
)

:: ==============================
:: Functie flash
:: ==============================
:FLASH_LOOP
set /a RETRIES=0
:TRY_FLASH
echo.
echo Flashen op %PORT% met baud %DEFAULT_BAUD%...
esptool.exe ^
--chip esp32 ^
--port %PORT% ^
--baud %DEFAULT_BAUD% ^
--before default_reset ^
--after hard_reset ^
write_flash -z ^
--flash_mode dio ^
--flash_freq 40m ^
--flash_size detect ^
0x1000 %BIN_DIR%\bootloader.bin ^
0x8000 %BIN_DIR%\partitions.bin ^
0xE000 %BIN_DIR%\boot_app0.bin ^
0x10000 %BIN_DIR%\firmware.bin

if errorlevel 1 (
    set /a RETRIES+=1
    echo.
    echo ❌ Flash mislukt (poging !RETRIES! van %MAX_RETRIES%)
    if !RETRIES! lss %MAX_RETRIES% (
        echo Probeer opnieuw...
        goto TRY_FLASH
    ) else (
        echo.
        echo Mogelijke oorzaken:
        echo 1. Houd de BOOT-knop ingedrukt tijdens flash
        echo 2. Gebruik een andere USB-poort of kabel
        echo 3. Verlaag de baudrate
        echo.
        echo Flash opnieuw proberen met lage baudrate (%SLOW_BAUD%)...
        set DEFAULT_BAUD=%SLOW_BAUD%
        set /a RETRIES=0
        goto TRY_FLASH
    )
)

echo.
echo ✅ FLASH SUCCESVOL!
pause
exit /b 0
