@echo off
REM =========================================================================
REM  CATIA STP -> WRL Toplu Dönüştürücü
REM  FikatiaV2024 - Automatic Batch Conversion System
REM =========================================================================
REM
REM  Kullanım:
REM    convert_all_stp.bat                    (Mevcut klasördeki tüm STP'ler)
REM    convert_all_stp.bat "C:\klasor"        (Belirtilen klasördeki STP'ler)
REM    convert_all_stp.bat "C:\klasor" /r     (Alt klasörler dahil)
REM
REM =========================================================================

setlocal enabledelayedexpansion

echo.
echo =========================================================================
echo   CATIA STP -^> WRL Toplu Converter
echo   FikatiaV2024 Batch System
echo =========================================================================
echo.

REM Klasör belirleme
if "%~1"=="" (
    set "SEARCH_DIR=%CD%"
) else (
    set "SEARCH_DIR=%~1"
)

REM Alt klasör araması kontrolü
set "RECURSIVE="
if /i "%~2"=="/r" set "RECURSIVE=/s"

REM Klasör varlık kontrolü
if not exist "%SEARCH_DIR%" (
    echo HATA: Klasor bulunamadi!
    echo Klasor: %SEARCH_DIR%
    echo.
    pause
    exit /b 1
)

echo [1/4] Klasor Taramasi
echo -------------------------------------------------------------------------
echo   Arama Dizini : %SEARCH_DIR%
echo   Alt Klasorler: %RECURSIVE%
if "%RECURSIVE%"=="/s" (
    echo                  Evet
) else (
    echo                  Hayir
)
echo.

REM STP dosyalarını say
set "COUNT=0"
for %%F in ("%SEARCH_DIR%\*.stp" "%SEARCH_DIR%\*.step") do (
    set /a COUNT+=1
)

if "%RECURSIVE%"=="/s" (
    for /r "%SEARCH_DIR%" %%F in (*.stp *.step) do (
        set /a COUNT+=1
    )
)

if !COUNT!==0 (
    echo   UYARI: Hic STP/STEP dosyasi bulunamadi!
    echo.
    pause
    exit /b 0
)

echo   Bulunan Dosya: !COUNT! adet
echo.

REM Script dizini ve macro yolu
set "SCRIPT_DIR=%~dp0"
set "MACRO_PATH=%SCRIPT_DIR%ConvertMacro.catvbs"

REM Macro kontrolü
if not exist "%MACRO_PATH%" (
    echo HATA: CATIA macro dosyasi bulunamadi!
    echo Beklenen: %MACRO_PATH%
    echo.
    pause
    exit /b 1
)

REM CATIA yolu
set "CATIA_PATH=C:\Program Files\Dassault Systemes\B20\win_b64\code\bin\CATSTART.exe"

if not exist "%CATIA_PATH%" (
    echo HATA: CATIA bulunamadi!
    echo Beklenen: %CATIA_PATH%
    echo.
    pause
    exit /b 1
)

echo [2/4] Hazirlik
echo -------------------------------------------------------------------------
echo   CATIA      : Bulundu
echo   Macro      : Bulundu
echo   Mod        : Batch (gorunmez)
echo.

REM Onay al
echo   !COUNT! adet dosya donusturulecek.
echo.
set /p "CONFIRM=Devam etmek istiyor musunuz? (E/H): "
if /i not "!CONFIRM!"=="E" (
    echo.
    echo Islem iptal edildi.
    pause
    exit /b 0
)

echo.
echo [3/4] Donusturme Islemi
echo -------------------------------------------------------------------------

REM Sayaçlar
set "PROCESSED=0"
set "SUCCESS=0"
set "FAILED=0"

REM Log dosyası
set "BATCH_LOG=%SCRIPT_DIR%batch_conversion.log"
echo ========================================== > "%BATCH_LOG%"
echo CATIA Batch Conversion Log >> "%BATCH_LOG%"
echo Started: %DATE% %TIME% >> "%BATCH_LOG%"
echo ========================================== >> "%BATCH_LOG%"
echo. >> "%BATCH_LOG%"

REM Dosyaları işle
if "%RECURSIVE%"=="/s" (
    REM Alt klasörler dahil
    for /r "%SEARCH_DIR%" %%F in (*.stp *.step) do (
        call :ProcessFile "%%F"
    )
) else (
    REM Sadece ana klasör
    for %%F in ("%SEARCH_DIR%\*.stp" "%SEARCH_DIR%\*.step") do (
        call :ProcessFile "%%F"
    )
)

echo.
echo [4/4] Ozet
echo =========================================================================
echo   Toplam Dosya  : !COUNT!
echo   Islenen       : !PROCESSED!
echo   Basarili      : !SUCCESS!
echo   Basarisiz     : !FAILED!
echo.
echo   Log Dosyasi   : %BATCH_LOG%
echo =========================================================================
echo.

if !FAILED! gtr 0 (
    echo   UYARI: Bazi dosyalar donusturulemedi!
    echo   Detaylar icin log dosyasini kontrol edin.
)

pause
exit /b 0

REM =========================================================================
REM DOSYA İŞLEME FONKSİYONU
REM =========================================================================
:ProcessFile
set "STP_FILE=%~1"
set "WRL_FILE=%~dpn1.wrl"

set /a PROCESSED+=1

echo.
echo   [!PROCESSED!/!COUNT!] %~nx1
echo   ------------------------

REM CATIA'yı çalıştır
"%CATIA_PATH%" -batch -run "CNEXT.exe" -macro "%MACRO_PATH%" "%STP_FILE%" "%WRL_FILE%" >nul 2>&1

REM Sonuç kontrolü
if exist "%WRL_FILE%" (
    for %%A in ("%WRL_FILE%") do set "FILESIZE=%%~zA"
    echo   DURUM: BASARILI (!FILESIZE! bytes)
    set /a SUCCESS+=1

    REM Log'a yaz
    echo [SUCCESS] %~nx1 >> "%BATCH_LOG%"
    echo   Input : %STP_FILE% >> "%BATCH_LOG%"
    echo   Output: %WRL_FILE% >> "%BATCH_LOG%"
    echo   Size  : !FILESIZE! bytes >> "%BATCH_LOG%"
    echo. >> "%BATCH_LOG%"
) else (
    echo   DURUM: BASARISIZ
    set /a FAILED+=1

    REM Log'a yaz
    echo [FAILED] %~nx1 >> "%BATCH_LOG%"
    echo   Input : %STP_FILE% >> "%BATCH_LOG%"
    echo   Error : WRL file not created >> "%BATCH_LOG%"
    echo. >> "%BATCH_LOG%"
)

goto :eof
