@echo off
setlocal EnableDelayedExpansion

if "%~1"=="" (
    set "START_DIR="
) else (
    set "START_DIR=%~f1"
)

if not defined START_DIR (
    set /p START_DIR="Podaj sciezke do analizy: "
)

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

for /f "tokens=2 delims==" %%a in ('powershell -Command "Get-Date -Format 'yyyyMMdd_HHmmss'"') do set TS=%%a

set "RAPORT=raport_%TS%.txt"

echo Analiza struktury katalogow > "%RAPORT%"
echo Data: %DATE% %TIME% >> "%RAPORT%"
echo Katalog: %START_DIR% >> "%RAPORT%"
echo ================================================ >> "%RAPORT%"
echo.

set "TOTAL_FILES=0"
set "TOTAL_SIZE=0"

set "SIZE_pdf=0"
set "SIZE_docx=0"
set "SIZE_jpg=0"
set "SIZE_png=0"
set "SIZE_xlsx=0"
set "SIZE_txt=0"
set "SIZE_other=0"

set "EXT_pdf=0"
set "EXT_docx=0"
set "EXT_jpg=0"
set "EXT_png=0"
set "EXT_xlsx=0"
set "EXT_txt=0"
set "EXT_other=0"

for /R "%START_DIR%" %%F in (*) do (
    set /a TOTAL_FILES+=1
    set /a TOTAL_SIZE+=%%~zF
    
    set "EXT=%%~xF"
    set "EXT=!EXT:~1!"
    
    if /i "!EXT!"=="pdf" (
        set /a SIZE_pdf+=%%~zF
        set /a EXT_pdf+=1
    ) else if /i "!EXT!"=="docx" (
        set /a SIZE_docx+=%%~zF
        set /a EXT_docx+=1
    ) else if /i "!EXT!"=="jpg" (
        set /a SIZE_jpg+=%%~zF
        set /a EXT_jpg+=1
    ) else if /i "!EXT!"=="png" (
        set /a SIZE_png+=%%~zF
        set /a EXT_png+=1
    ) else if /i "!EXT!"=="xlsx" (
        set /a SIZE_xlsx+=%%~zF
        set /a EXT_xlsx+=1
    ) else if /i "!EXT!"=="txt" (
        set /a SIZE_txt+=%%~zF
        set /a EXT_txt+=1
    ) else (
        set /a SIZE_other+=%%~zF
        set /a EXT_other+=1
    )
)

echo Liczba plikow: %TOTAL_FILES%
echo Calkowity rozmiar: %TOTAL_SIZE% bajtow
echo.

call :format_size SIZE_DISP %TOTAL_SIZE%
echo Raport zapisany do: %RAPORT%
echo.

echo STATYSTYKI WEDLUG ROSZERZEN:
echo --------------------------------
if %EXT_pdf% GTR 0 (
    call :format_size S1 !SIZE_pdf!
    echo .pdf : %EXT_pdf% plikow, !S1!
)
if %EXT_docx% GTR 0 (
    call :format_size S1 !SIZE_docx!
    echo .docx: %EXT_docx% plikow, !S1!
)
if %EXT_jpg% GTR 0 (
    call :format_size S1 !SIZE_jpg!
    echo .jpg : %EXT_jpg% plikow, !S1!
)
if %EXT_png% GTR 0 (
    call :format_size S1 !SIZE_png!
    echo .png : %EXT_png% plikow, !S1!
)
if %EXT_xlsx% GTR 0 (
    call :format_size S1 !SIZE_xlsx!
    echo .xlsx: %EXT_xlsx% plikow, !S1!
)
if %EXT_txt% GTR 0 (
    call :format_size S1 !SIZE_txt!
    echo .txt : %EXT_txt% plikow, !S1!
)
if %EXT_other% GTR 0 (
    call :format_size S1 !SIZE_other!
    echo Inne: %EXT_other% plikow, !S1!
)

echo.
echo -------------------------------- >> "%RAPORT%"
echo STATYSTYKI WEDLUG ROSZERZEN >> "%RAPORT%"
echo -------------------------------- >> "%RAPORT%"
if %EXT_pdf% GTR 0 (
    call :format_size S1 !SIZE_pdf!
    echo .pdf : %EXT_pdf% plikow, !S1! >> "%RAPORT%"
)
if %EXT_docx% GTR 0 (
    call :format_size S1 !SIZE_docx!
    echo .docx: %EXT_docx% plikow, !S1! >> "%RAPORT%"
)
if %EXT_jpg% GTR 0 (
    call :format_size S1 !SIZE_jpg!
    echo .jpg : %EXT_jpg% plikow, !S1! >> "%RAPORT%"
)
if %EXT_png% GTR 0 (
    call :format_size S1 !SIZE_png!
    echo .png : %EXT_png% plikow, !S1! >> "%RAPORT%"
)
if %EXT_xlsx% GTR 0 (
    call :format_size S1 !SIZE_xlsx!
    echo .xlsx: %EXT_xlsx% plikow, !S1! >> "%RAPORT%"
)
if %EXT_txt% GTR 0 (
    call :format_size S1 !SIZE_txt!
    echo .txt : %EXT_txt% plikow, !S1! >> "%RAPORT%"
)
if %EXT_other% GTR 0 (
    call :format_size S1 !SIZE_other!
    echo Inne: %EXT_other% plikow, !S1! >> "%RAPORT%"
)

echo. >> "%RAPORT%"
echo Calkowita liczba plikow: %TOTAL_FILES% >> "%RAPORT%"
call :format_size S1 %TOTAL_SIZE%
echo Calkowity rozmiar: !S1! >> "%RAPORT%"

endlocal
exit /b 0

:format_size
setlocal
set "SIZE=%~2"
set "RESULT="

if %SIZE% GEQ 1073741824 (
    set /a MB=%SIZE% / 1073741824
    set "REST=%SIZE%"
    set /a REST%%=1073741824
    set /a REST/=10737418
    set "RESULT=!MB!.!REST! GB"
) else if %SIZE% GEQ 1048576 (
    set /a MB=%SIZE% / 1048576
    set "REST=%SIZE%"
    set /a REST%%=1048576
    set /a REST/=10486
    set "RESULT=!MB!.!REST! MB"
) else if %SIZE% GEQ 1024 (
    set /a KB=%SIZE% / 1024
    set "REST=%SIZE%"
    set /a REST%%=1024
    set /a REST/=103
    set "RESULT=!KB!.!REST! KB"
) else (
    set "RESULT=%SIZE% B"
)
endlocal & set "%~1=%RESULT%"
exit /b 0