@echo off
setlocal EnableDelayedExpansion

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

if not defined ROOT_DIR (
    set /p ROOT_DIR="Podaj sciezke do dokumentowania: "
)

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

for /f "tokens=2 delims==" %%a in ('powershell -Command "Get-Date -Format 'yyyy-MM-dd_HH-mm-ss'"') do set TS=%%a

set "DIR_NAME=%~n1"
if "%DIR_NAME%"=="" set "DIR_NAME=%~p1"
set "DIR_NAME=%DIR_NAME:~0,-1%"
if "%DIR_NAME%"=="" set "DIR_NAME=project"

set "OUTPUT=%DIR_NAME%_dokumentacja_%TS%.md"

call :get_parent_name PARENT_NAME "%ROOT_DIR%"

call :generate_doc

echo Dokumentacja wygenerowana: %OUTPUT%
endlocal
exit /b 0

:get_parent_name
setlocal
set "PATH=%~f2"
for %%P in ("%PATH%") do set "NAME=%%~nxP"
endlocal & set "%~1=%NAME%"
exit /b 0

:generate_doc
echo # Dokumentacja: %PARENT_NAME% > "%OUTPUT%"
echo. >> "%OUTPUT%"
echo **Data wygenerowania:** %DATE% %TIME% >> "%OUTPUT%"
echo. >> "%OUTPUT%"
echo ## Spis tresci >> "%OUTPUT%"
echo. >> "%OUTPUT%"

set "TOC_NUM=1"

for /d /r "%ROOT_DIR%" %%D in (*) do (
    set "DIR_NAME=%%~nxD"
    set "DIR_PATH=%%D"
    
    set "ANCHOR=!DIR_NAME!"
    set "ANCHOR=!ANCHOR: =-!"
    
    echo !TOC_NUM!. [Dir: !DIR_NAME!](#!ANCHOR!) >> "%OUTPUT%"
    set /a TOC_NUM+=1
    
    call :doc_section "!DIR_PATH!" "!DIR_NAME!"
)

echo. >> "%OUTPUT%"
echo ## Struktura katalogow >> "%OUTPUT%"
echo. >> "%OUTPUT%"
echo ^\`\`\` >> "%OUTPUT%"

for /d /r "%ROOT_DIR%" %%D in (*) do (
    set "DIR_PATH=%%D"
    set "REL_PATH=!DIR_PATH:%ROOT_DIR%=!"
    
    echo Directory: !REL_PATH! >> "%OUTPUT%"
    
    for %%F in ("%%D\*") do (
        set "FILE_NAME=%%~nxF"
        set "FILE_SIZE=%%~zF"
        
        if !FILE_SIZE! GEQ 1048576 (
            set /a SIZE_MB=FILE_SIZE / 1048576
            echo   - !FILE_NAME! \(!SIZE_MB! MB\) >> "%OUTPUT%"
        ) else if !FILE_SIZE! GEQ 1024 (
            set /a SIZE_KB=FILE_SIZE / 1024
            echo   - !FILE_NAME! \(!SIZE_KB! KB\) >> "%OUTPUT%"
        ) else (
            echo   - !FILE_NAME! \(!FILE_SIZE! B\) >> "%OUTPUT%"
        )
    )
    
    if exist "%%D\README.md" (
        echo   - README.md >> "%OUTPUT%"
    )
)

for %%F in ("%ROOT_DIR%\*") do (
    if not "%%~nxF"=="%OUTPUT%" (
        set "FILE_NAME=%%~nxF"
        set "FILE_SIZE=%%~zF"
        
        if !FILE_SIZE! GEQ 1048576 (
            set /a SIZE_MB=FILE_SIZE / 1048576
            echo - !FILE_NAME! \(!SIZE_MB! MB\) >> "%OUTPUT%"
        ) else if !FILE_SIZE! GEQ 1024 (
            set /a SIZE_KB=FILE_SIZE / 1024
            echo - !FILE_NAME! \(!SIZE_KB! KB\) >> "%OUTPUT%"
        ) else (
            echo - !FILE_NAME! \(!FILE_SIZE! B\) >> "%OUTPUT%"
        )
    )
)

echo ^\`\`\` >> "%OUTPUT%"
echo. >> "%OUTPUT%"

set "TOTAL_FILES=0"
for /r "%ROOT_DIR%" %%F in (*) do (
    set /a TOTAL_FILES+=1
)

echo. >> "%OUTPUT%"
echo --- >> "%OUTPUT%"
echo. >> "%OUTPUT%"
echo **Wygenerowano dla:** %TOTAL_FILES% plikow >> "%OUTPUT%"
exit /b 0

:doc_section
setlocal
set "DIR_PATH=%~1"
set "DIR_NAME=%~2"

set "ANCHOR=%DIR_NAME%"
set "ANCHOR=%ANCHOR: =-!"

echo. >> "%OUTPUT%"
echo ## ^# Dir: %DIR_NAME% >> "%OUTPUT%"
echo. >> "%OUTPUT%"

if exist "%DIR_PATH%\README.md" (
    echo **Opis:** >> "%OUTPUT%"
    for /f "tokens=1,* delims=" %%A in ("%DIR_PATH%\README.md") do (
        echo %%A >> "%OUTPUT%"
    )
    echo. >> "%OUTPUT%"
)

endlocal
exit /b 0