#!/bin/bash

DLUGOSC="${1:-16}"

if [[ ! "$DLUGOSC" =~ ^[0-9]+$ ]] || [[ $DLUGOSC -lt 4 ]]; then
    echo "Błąd: Długość musi być liczbą >= 4"
    exit 1
fi

export LC_ALL=C
WIELKE="A-Z"
MALE="a-z"
CYF="0-9"
SPEC='!@#$%^&*()_+-=[]{}|;:,.<>?'

POZOSTALE=0
TRIES=0
MAX_TRIES=100

while true; do
    ((TRIES++))
    
    if [[ $TRIES -gt $MAX_TRIES ]]; then
        echo "Błąd: Nie udało się wygenerować hasła spełniającego wymagania po $MAX_TRIES próbach"
        exit 1
    fi
    
    HASLO=$(tr -dc "$WIELKE$MALE$CYF$SPEC" < /dev/urandom | head -c $DLUGOSC)
    
    has_wielka=$(echo "$HASLO" | grep -o '[A-Z]' | head -1)
    has_mala=$(echo "$HASLO" | grep -o '[a-z]' | head -1)
    has_cyfra=$(echo "$HASLO" | grep -o '[0-9]' | head -1)
    has_spec=$(echo "$HASLO" | grep -o '[!@#$%^&*()_+-=[]{}|;:,.<>?]' | head -1)
    
    if [[ -n "$has_wielka" && -n "$has_mala" && -n "$has_cyfra" && -n "$has_spec" ]]; then
        break
    fi
done

echo "=================================="
echo "  GENERATOR HASEŁ"
echo "=================================="
echo "Wygenerowane hasło:"
echo "$HASLO"
echo ""
echo "Długość: ${#HASLO} znaków"
echo ""
echo "Weryfikacja:"
echo "  Wielka litera (A-Z): $([[ -n "$has_wielka" ]] && echo "TAK" || echo "NIE")"
echo "  Mała litera (a-z): $([[ -n "$has_mala" ]] && echo "TAK" || echo "NIE")"
echo "  Cyfra (0-9): $([[ -n "$has_cyfra" ]] && echo "TAK" || echo "NIE")"
echo "  Znak specjalny: $([[ -n "$has_spec" ]] && echo "TAK" || echo "NIE")"
echo "=================================="

exit 0