#!/bin/bash

# ==============================================================================
# KONFIGURACJA
# ==============================================================================
MANUAL_DIRECTORIES=(
    "/media/tv/Filmy"
    "/media/tv/Programy"
    # Dodaj swoje ścieżki
)

# Rozszerzenia (bez kropki)
EXTENSIONS=("mkv" "mp4" "avi" "mov" "wmv" "m4v" "ts")

POSITION_PERCENT=0.20
OVERWRITE=false
QUALITY=2

# Wymuszenie kodowania UTF-8 (pomaga przy polskich znakach)
export LC_ALL=C.UTF-8
export LANG=C.UTF-8

# ==============================================================================

if ! command -v ffmpeg &> /dev/null; then
    echo "Błąd: Brak ffmpeg."
    exit 1
fi

# Obsługa argumentów lub listy zdefiniowanej wyżej
if [ "$#" -gt 0 ]; then
    TARGET_DIRS=("$@")
else
    TARGET_DIRS=("${MANUAL_DIRECTORIES[@]}")
fi

for CURRENT_DIR in "${TARGET_DIRS[@]}"; do

    if [ ! -d "$CURRENT_DIR" ]; then
        echo "POMINIĘTO (brak katalogu): $CURRENT_DIR"
        continue
    fi

    echo "========================================================"
    echo "SKANOWANIE: $CURRENT_DIR"
    echo "========================================================"

    # Budowanie argumentów dla polecenia find w tablicy (bezpieczne dla spacji)
    find_args=("$CURRENT_DIR" -type f \()

    # Dodawanie rozszerzeń dynamicznie
    first=true
    for ext in "${EXTENSIONS[@]}"; do
        if [ "$first" = true ]; then
            first=false
        else
            find_args+=(-o)
        fi
        # -iname ignoruje wielkość liter (znajdzie .mkv i .MKV)
        find_args+=(-iname "*.$ext")
    done

    # Zamknięcie nawiasu find i dodanie -print0
    find_args+=(\) -print0)

    # Uruchomienie find z argumentami z tablicy
    # -print0 w połączeniu z read -d '' to klucz do obsługi spacji i znaków PL
    find "${find_args[@]}" | while IFS= read -r -d '' video_path; do

        # Bezpieczne wyciąganie katalogu i nazwy
        dir_path=$(dirname "$video_path")
        filename=$(basename "$video_path")
        filename_no_ext="${filename%.*}"

        output_landscape="$dir_path/landscape.jpg"
        output_thumb="$dir_path/${filename_no_ext}-thumb.jpg"

        if [ "$OVERWRITE" = false ] && [ -f "$output_landscape" ] && [ -f "$output_thumb" ]; then
            continue
        fi

        echo "-> Przetwarzanie: $filename"

        # Pobieranie czasu (ffprobe też musi mieć ścieżkę w cudzysłowie)
        duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$video_path")

        # Sprawdzenie czy duration jest liczbą
        if [[ ! "$duration" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            echo "   BŁĄD: Problem z odczytem pliku (może uszkodzony?)"
            continue
        fi

        target_time=$(awk -v dur="$duration" -v per="$POSITION_PERCENT" 'BEGIN {print dur * per}')

        # Unikalna nazwa tymczasowa
        temp_img="/tmp/jf_tmp_$RANDOM.jpg"

        # ffmpeg z cudzysłowami
        ffmpeg -y -ss "$target_time" -i "$video_path" -frames:v 1 -q:v "$QUALITY" "$temp_img" < /dev/null > /dev/null 2>&1

        if [ $? -eq 0 ]; then
            if [ ! -f "$output_landscape" ] || [ "$OVERWRITE" = true ]; then
                 cp "$temp_img" "$output_landscape"
                 echo "   + Utworzono landscape"
            fi

            if [ ! -f "$output_thumb" ] || [ "$OVERWRITE" = true ]; then
                 cp "$temp_img" "$output_thumb"
                 echo "   + Utworzono thumb"
            fi
            rm "$temp_img"
        else
            echo "   BŁĄD ffmpeg - nie udało się wygenerować klatki."
        fi

    done
done

echo "Zakończono."
