@echo off
setlocal EnableDelayedExpansion

set "MAZE=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "MALE=abcdefghijklmnopqrstuvwxyz"
set "CYFRY=0123456789"
set "SPECJALNE=@#$%%^&"

:menu
cls
echo ========================================
echo GENERATOR HASEL JEDNORAZOWYCH
echo ========================================
echo.
echo Wybierz dlugosc hasla:
echo   8  - Krotkie (8 znakow)
echo   12 - Srednie (12 znakow)
echo   16 - Dlugie (16 znakow)
echo   20 - Bardzo dlugie (20 znakow)
echo   24 - Maksymalne (24 znaki)
echo.
set /p WYBOR="Twoj wybor (8/12/16/20/24): "

if not defined WYBOR goto menu
if "%WYBOR%"=="8" goto continue
if "%WYBOR%"=="12" goto continue
if "%WYBOR%"=="16" goto continue
if "%WYBOR%"=="20" goto continue
if "%WYBOR%"=="24" goto continue
goto menu

:continue
set /p SPECJALNE_YN="Uzyc znakow specjalnych? (T/N): "

:generate
set "HASLO="

set /a IDX1=!RANDOM! %% 26
set "H1=!MAZE:~%IDX1%,1!"

set /a IDX2=!RANDOM! %% 26
set "H2=!MALE:~%IDX2%,1!"

set /a IDX3=!RANDOM! %% 10
set "H3=!CYFRY:~%IDX3%,1!"

set "HASLO=!H1!!H2!!H3!"

if /i "%SPECJALNE_YN%"=="T" (
    set /a IDX4=!RANDOM! %% 8
    set "H4=!SPECJALNE:~%IDX4%,1!"
    set "HASLO=!HASLO!!H4!"
)

set /a DLUGOSC=WYBOR
set /a ROZNICA=DLUGOSC - 4

for /l %%N in (1,1,!ROZNICA!) do (
    set /a TYP=!RANDOM! %% 4
    if !TYP!==0 (
        set /a IDX=!RANDOM! %% 26
        set "ZNAK=!MAZE:~!IDX!,1!"
    ) else if !TYP!==1 (
        set /a IDX=!RANDOM! %% 26
        set "ZNAK=!MALE:~!IDX!,1!"
    ) else if !TYP!==2 (
        set /a IDX=!RANDOM! %% 10
        set "ZNAK=!CYFRY:~!IDX!,1!"
    ) else (
        set /a IDX=!RANDOM! %% 8
        set "ZNAK=!SPECJALNE:~!IDX!,1!"
    )
    set "HASLO=!HASLO!!ZNAK!"
)

set "SHUFFLED="
for /l %%N in (1,1,%DLUGOSC%) do (
    set /a POS=!RANDOM! %% !DLUGOSC!
    set "SHUFFLED=!HASLO!"
)

echo.
echo ========================================
echo WYGENEROWANE HASLO:
echo ========================================
echo !HASLO!
echo ========================================
echo.
echo UWAGA: Haslo wyswietlone tylko raz!
echo.

set /p NOWE="Czy wygenerowac nowe haslo? (T/N): "
if /i "!NOWE!"=="T" goto generate

echo Dziekuje za skorzystanie z generatora!
endlocal
exit /b 0