#!/bin/bash

KATALOG="$1"
TRYB="$2"
ARG3="$3"
ARG4="$4"

function wyswietl_pomoc {
    echo "Użycie: $0 <katalog> <tryb> [argumenty...] [--preview]"
    echo ""
    echo "Tryby transformacji:"
    echo "  lowercase       - zmiana na małe litery"
    echo "  uppercase      - zmiana na wielkie litery"
    echo "  prefix <pref>  - dodaj prefix do nazwy"
    echo "  replace <z> <na> - zamień tekst w nazwie"
    echo ""
    echo "Opcje:"
    echo "  --preview      - podgląd bez faktycznej zmiany"
    echo ""
    echo "Przykłady:"
    echo "  $0 /tmp/pliki lowercase --preview"
    echo "  $0 /tmp/pliki prefix img_"
    echo "  $0 /tmp/pliki replace \" \" \"_\""
    exit 1
}

if [[ $# -lt 2 ]]; then
    wyswietl_pomoc
fi

if [[ ! -d "$KATALOG" ]]; then
    echo "Błąd: Katalog '$KATALOG' nie istnieje"
    exit 1
fi

PREVIEW=false
for arg in "$@"; do
    if [[ "$arg" == "--preview" ]]; then
        PREVIEW=true
    fi
done

cd "$KATALOG"

zmienione=0
pominiete=0
bledy=0

for plik in *; do
    [[ -e "$plik" ]] || continue
    [[ -f "$plik" ]] || continue
    
    case "$TRYB" in
        lowercase)
            NOWA_NAZWA=$(echo "$plik" | tr '[:upper:]' '[:lower:]')
            ;;
        uppercase)
            NOWA_NAZWA=$(echo "$plik" | tr '[:lower:]' '[:upper:]')
            ;;
        prefix)
            NOWA_NAZWA="${ARG3}${plik}"
            ;;
        replace)
            if [[ -z "$ARG3" ]]; then
                echo "Błąd: Podaj tekst do zamiany"
                exit 1
            fi
            NOWA_NAZWA="${plik//$ARG3/$ARG4}"
            ;;
        *)
            echo "Błąd: Nieznany tryb '$TRYB'"
            wyswietl_pomoc
            ;;
    esac
    
    if [[ "$plik" == "$NOWA_NAZWA" ]]; then
        ((pominiete++))
        continue
    fi
    
    if [[ -e "$NOWA_NAZWA" ]]; then
        echo "Ostrzeżenie: Plik '$NOWA_NAZWA' już istnieje - pomijam '$plik'"
        ((pominiete++))
        continue
    fi
    
    if [[ "$PREVIEW" == "true" ]]; then
        echo "[PREVIEW] $plik -> $NOWA_NAZWA"
        ((zmienione++))
    else
        if mv "$plik" "$NOWA_NAZWA" 2>/dev/null; then
            echo "[OK] $plik -> $NOWA_NAZWA"
            ((zmienione++))
        else
            echo "[BŁĄD] Nie udało się zmienić nazwy: $plik"
            ((bledy++))
        fi
    fi
done

echo ""
echo "=================================="
echo "  PODSUMOWANIE"
echo "=================================="
echo "Pliki zmienione: $zmienione"
echo "Pliki pominięte: $pominiete"
echo "Błędy: $bledy"
echo "=================================="

if [[ $bledy -gt 0 ]]; then
    exit 1
fi
exit 0