#!/bin/bash
# Set GAMEDIR to the current directory and set logfile
GAMEDIR="$PWD"
LOGFILE="$GAMEDIR/patchlog.txt"

# Redirect output and error to the log file
exec > >(tee -a "$LOGFILE") 2>&1
echo "GAMEDIR is set to: $GAMEDIR"

# Exports
export DATADIR="$GAMEDIR/assets"
export DATAFILE="game.port"
export LD_LIBRARY_PATH="/usr/lib:$GAMEDIR/lib:$GAMEDIR/tools/libs:$LD_LIBRARY_PATH"
export SDL_GAMECONTROLLERCONFIG="$sdl_controllerconfig"
export TOOLDIR="$GAMEDIR/tools"
export TMPDIR="$GAMEDIR/tmp"
export PATH="$GAMEDIR/tools:$PATH"

# Permissions
chmod 666 /dev/uinput
chmod 777 "$TOOLDIR/gmKtool.py"
chmod 777 "$TOOLDIR/oggenc"

cd "$GAMEDIR"

apply_xdelta() {
    # Check if the data.win file exists and apply xdelta
    if [ -f "$DATADIR/data.win" ]; then
        output=$(xdelta3 -d -s "$DATADIR/data.win" -f "./tools/patch/skpdsteam.xdelta" "$DATADIR/game.droid" 2>&1)
        if [ $? -eq 0 ]; then
            echo "Patch applied successfully"
            echo "$output"
            rm "$DATADIR/data.win"
        else
            echo "Failed to apply patch"
            echo "$output"
            exit 1
        fi
    else
        echo "No data.win file found to patch!"
    fi
}

compress_audio() {
    mkdir -p "$TMPDIR"

    # Run the compression tool
    PYTHON=$(which python3)
    echo "Running GMTools on data and audiogroups."
    $PYTHON ./tools/gmKtool.py -vv -m 1000 -r -b 64 -d "$TMPDIR" "$DATADIR/game.droid"

    if [ $? -eq 0 ]; then
        echo "Compression completed successfully."
        mv "$TMPDIR/"* "$DATADIR"
        echo "Moved compressed files to $DATADIR."
        rmdir "$TMPDIR"
        echo "Temporary directory $TMPDIR removed."
        echo "Audio compression applied successfully."
    else
        echo "Audio compression failed."
        echo "Cleaning up temporary directory $TMPDIR."
        rm -rf "$TMPDIR"
    fi
}

zip_archive() {
        zip -r -0 $DATAFILE ./assets/
        rm -rf ./assets
        mkdir -p saves
}

process_game() {
    # Delete unnecessary files
    rm -rf $DATADIR/*.exe $DATADIR/*.dll $DATADIR/.gitkeep
    echo "Removed unnecessary files"

    echo "Applying xdelta patch"
    apply_xdelta
    sleep 1
    echo "Compressing audio..."
    compress_audio
    sleep 1
    echo "Finishing up..."
    zip_archive
    sleep 1
	
    # Final completion message
    echo "Patching process complete!"
}

# Call the function
process_game