#!/bin/bash

# Variables
GAMEDIR="$PWD"
LOGFILE="$GAMEDIR/assets/otrlog.txt"
BASEROMS_DIR="$GAMEDIR/baseroms"
ARGS=""
i=1

exec > >(tee "$LOGFILE") 2>&1

# Exports
export LD_LIBRARY_PATH="$GAMEDIR/libs.${DEVICE_ARCH}:$LD_LIBRARY_PATH"

unzip_assets() {
    # Define 7zzs binary
    SEVENZIP="$controlfolder/7zzs.${DEVICE_ARCH}"
    if [ ! -x "$SEVENZIP" ]; then
        echo "7zzs binary not found at $SEVENZIP"
        return 1
    fi

    EXTRACTOR_ZIP="$GAMEDIR/assets/extractor.zip"
    EXTRACTOR_DIR="$GAMEDIR/assets"

    if [ -f "$EXTRACTOR_ZIP" ]; then
        echo "Extracting extractor.zip..."
        if "$SEVENZIP" x -y "$EXTRACTOR_ZIP" -o"$EXTRACTOR_DIR" >/dev/null; then
            chmod +x "$EXTRACTOR_DIR/extractor/ZAPD.out"
            rm -f "$EXTRACTOR_ZIP"
        else
            echo "Error: Extraction failed"
            return 1
        fi
    fi
}

process_roms() {
    # Collect ROM files
    romfiles=("$BASEROMS_DIR"/*.*64)
    if [ ! -e "${romfiles[0]}" ]; then
        echo "Warning: No ROM files found in $BASEROMS_DIR."
        echo "Please add one or more *.z64 or *.n64 files before running this script."
        return 1
    fi

    # Process ROMs
    for romfile in "${romfiles[@]}"; do
        ext="${romfile##*.}"
        newname="$BASEROMS_DIR/rom$i.$ext"
        if mv -f "$romfile" "$newname"; then
            echo "Renamed $romfile -> $newname"
            ARGS="$ARGS \"$newname\""
            ((i++))
        else
            echo "Error: Failed to rename $romfile"
            return 1
        fi
    done
}

unzip_assets || { echo "Patching process failed!"; exit 1; }
process_roms || { echo "Patching process failed!"; exit 1; }

# Run soh.elf with all ROM arguments
eval "$GAMEDIR/soh.elf.${DEVICE_ARCH}" $ARGS > "$GAMEDIR/otrlog.txt" 2>&1

echo "Patching process complete!"
