@echo off
setlocal EnableDelayedExpansion

if "%~1"=="" (
    echo Uzycie: %~n0 ^<zrodlo^> ^<cel^> ^<kodowanie_zrodla^> ^<kodowanie_celu^>
    echo Przyklady:
    echo   %~n0 C:\txt D:\txt_converted ANSI UTF8
    echo   %~n0 C:\txt D:\txt_converted
    echo.
    echo Kodowania: ANSI, UTF8, UTF16
    exit /b 1
)

set "SOURCE=%~f1"
set "DEST=%~f2"
set "FROM_ENC=%~3"
set "TO_ENC=%~4"

if "%FROM_ENC%"=="" set "FROM_ENC=ANSI"
if "%TO_ENC%"=="" set "TO_ENC=UTF8"

if not exist "%SOURCE%" (
    echo Blad: Zrodlo '%SOURCE%' nie istnieje!
    exit /b 1
)

if not exist "%DEST%" (
    mkdir "%DEST%" 2>nul
)

call :map_encoding FROM_PS "%FROM_ENC%"
call :map_encoding TO_PS "%TO_ENC%"

set "COUNT_OK=0"
set "COUNT_ERR=0"
set "TOTAL=0"

echo ========================================
echo KONWERSJA KODOWANIA PLIKOW
echo ========================================
echo Zrodlo: %SOURCE%
echo Cel: %DEST%
echo Z: %FROM_ENC% ^(- %FROM_PS%^)
echo Na: %TO_ENC% ^(- %TO_PS%^)
echo ========================================
echo.

for /R "%SOURCE%" %%F in (*.txt *.html *.htm *.css *.js *.xml *.json) do (
    set /a TOTAL+=1
    set "FILE_PATH=%%~fF"
    set "FILE_NAME=%%~nxF"
    
    set "REL_PATH=!FILE_PATH:%SOURCE%=!"
    set "REL_PATH=!REL_PATH:~1!"
    
    set "DEST_DIR=%DEST%!REL_PATH!"
    set "DEST_DIR=!DEST_DIR:%FILE_NAME%=!"
    
    if not exist "!DEST_DIR!" (
        mkdir "!DEST_DIR!" 2>nul
    )
    
    set "OUT_FILE=!DEST_DIR!\%FILE_NAME%"
    
    powershell -Command "Get-Content -Path '!FILE_PATH!' -Encoding %FROM_PS% | Set-Content -Path '!OUT_FILE!' -Encoding %TO_PS%" 2>nul
    
    if errorlevel 1 (
        echo [BLAD] !FILE_NAME!
        set /a COUNT_ERR+=1
    ) else (
        echo [OK] !FILE_NAME!
        set /a COUNT_OK+=1
    )
)

echo.
echo ========================================
echo PODSUMOWANIE
echo ========================================
echo Przetworzono: %TOTAL%
echo Konwersja OK: %COUNT_OK%
echo Bledy: %COUNT_ERR%
echo ========================================

if %COUNT_ERR% GTR 0 (
    exit /b 1
)

endlocal
exit /b 0

:map_encoding
setlocal
set "ENC=%~2"
set "RESULT=Default"

if /i "%ENC%"=="UTF8" set "RESULT=UTF8"
if /i "%ENC%"=="UTF-8" set "RESULT=UTF8"
if /i "%ENC%"=="UTF16" set "RESULT=Unicode"
if /i "%ENC%"=="UTF-16" set "RESULT=Unicode"
if /i "%ENC%"=="ANSI" set "RESULT=Default"
if /i "%ENC%"=="CP1250" set "RESULT=Default"

endlocal & set "%~1=%RESULT%"
exit /b 0