#!/usr/bin/env bash
set -euo pipefail

if [ $# -lt 2 ]; then
    echo "Usage: $0 source_file.png file_to_hide1 [file_to_hide2 ...]"
    exit 1
fi

PNG="$1"
shift
OUT="hidden_$PNG"

cp "$PNG" "$OUT"

# funkcja do pobrania rozmiaru pliku w bajtach, kompatybilna macOS/Linux
get_file_size() {
    local file="$1"
    if [[ "$(uname)" == "Darwin" ]]; then
        stat -f%z "$file"
    else
        stat -c%s "$file"
    fi
}

for FILE in "$@"; do
    if [ ! -f "$FILE" ]; then
        echo "File '$FILE' does not exist, skipping."
        continue
    fi

    ENC="$FILE.enc"
    openssl enc -aes-256-cbc -pbkdf2 -salt -in "$FILE" -out "$ENC"

    FNAME_LEN=$(echo -n "$FILE" | wc -c)
    DATA_LEN=$(get_file_size "$ENC")

    # magic + nagłówek + zaszyfrowany plik
    {
        echo -n "MAGICHID"                  # magic marker
        printf "%04d" "$FNAME_LEN"           # filename length (4 bytes)
        echo -n "$FILE"                      # filename
        printf "%010d" "$DATA_LEN"           # data length (10 bytes)
        cat "$ENC"                           # zaszyfrowany plik
    } >> "$OUT"

    rm "$ENC"
    echo "Added $FILE to $OUT"
done

echo "Output PNG with hidden files: $OUT"