#!/bin/bash

set -u

RETCODE=0
SRCDIR=$(pwd)

# Format: "file-type|filename|size|expected_md5_hash"
TEST_CASES=(
    "video|1.webm|16|41ca70f228d8875177685b315f17ba3e"
    "video|1.webm|32|30e91133172d3598d836ac26942c2cc3"
    "video|1.webm|48|f44fd6485cac63de559d6f5e1ce7514b"
    "video|1.webm|64|76f84d64847d9d33302f8eca1027c4ff"
    "video|1.webm|512|4f53f865f0c086194d25e8dfa8708f47"
    "audio|audio-cover-png.flac|16|a27e98b57ff5e2c7a293ca0abf51a40f"
    "audio|audio-cover-png.flac|32|131649fde788a6bc00b1cf9011915267"
    "audio|audio-cover-png.flac|256|b04ff3ebf1c504a497c8627f64b2a07c"
)

echo "Starting Thumbnailer Integration Tests..."
echo "----------------------------------------"
for case in "${TEST_CASES[@]}"; do
    IFS='|' read -r content filename size expected_hash <<< "$case"

    input_path="$SRCDIR"/tests/"$filename"
    output_file="thumb_${filename}_${size}.png"

    if [[ "$content" == "video" ]]; then
        exe="gst-video-thumbnailer"
    else
        exe="gst-audio-thumbnailer"
    fi

    $exe --input-uri "file://$input_path" --output "$output_file" --size "$size"

    if [ ! -f "$output_file" ]; then
        echo "[FAIL] $filename ($size px): Output file not created."
        RETCODE=1
        continue
    fi

    actual_hash=$(md5sum "$output_file" | cut -f1 -d' ')

    if [ "$actual_hash" != "$expected_hash" ]; then
        echo "[FAIL] $filename ($size px): Hash mismatch."
        echo "       Expected: $expected_hash"
        echo "       Got:      $actual_hash"
        RETCODE=1
    else
        echo "[PASS] $filename ($size px)"
    fi

    rm -f "$output_file"
done

echo "----------------------------------------"
if [ $RETCODE -eq 0 ]; then
    echo "All tests passed."
else
    echo "Some tests failed."
fi

exit $RETCODE
