#!/bin/bash
CANONPATH=$(readlink -f "$0")
DIRPATH="$(dirname "$CANONPATH")"
cd "$DIRPATH" || exit
cd ../../../ || exit
DEBUG_SYMBOLS=
STATIC_CPP=
VERSION=
ARCH=$(arch)
for i in "$@"; do
    case $i in
        --with-debug-symbols)
            DEBUG_SYMBOLS="--with-debug-symbols"
            shift
            ;;
        --with-static-cpp)
            STATIC_CPP="--with-static-cpp"
            shift
            ;;
        --version)
            if [[ -n $2 ]]; then VERSION="$2"; fi
            shift
            shift
            ;;
        --arch)
            if [[ -n $2 ]]; then ARCH="$2"; fi
            shift
            shift
            ;;
        -*)
            echo "Unknown option $i"
            exit 1
            ;;
        *)
            ;;
    esac
done

if [ "$ARCH" = "aarch64" ]; then
    ARCH="arm64"
fi

CONFIG_NAME=
SO_LIB_PATH=
if command -v premake4 &> /dev/null
then
    premake4 $DEBUG_SYMBOLS $STATIC_CPP gmake || exit
    CONFIG_NAME=release
    SO_LIB_PATH=../../../libs/linux/libeepp.so
elif command -v premake5 &> /dev/null
then
    premake5 $DEBUG_SYMBOLS $STATIC_CPP gmake || exit
    CONFIG_NAME=release_"$ARCH"
    SO_LIB_PATH=../../../libs/linux/$ARCH/libeepp.so
else
    echo "Neither premake5 nor premake4 is available. Please install one."
    exit 1
fi

cd make/linux || exit
make -j"$(nproc)" config="$CONFIG_NAME" ecode || exit
cd "$DIRPATH" || exit
bash ../../scripts/copy_ecode_assets.sh ../../bin ecode.app || exit
mkdir -p ecode.app/libs
chmod +x AppRun
cp AppRun ecode.app/
cp ecode.desktop ecode.app/
cp ../../../bin/assets/icon/ecode.png ecode.app/ecode.png
cp "$SO_LIB_PATH" ecode.app/libs/
cp ../../../bin/ecode ecode.app/ecode.bin
cp -L "$(bash ../scripts/find_most_recent_sdl2.sh --arch="$ARCH")" ecode.app/libs/ || exit
${STRIP:-strip} ecode.app/libs/libSDL2-2.0.so.0

if [ -n "$VERSION" ];
then
ECODE_VERSION="$VERSION"
else
VERSIONPATH=../../../src/tools/ecode/version.hpp
ECODE_MAJOR_VERSION=$(grep "define ECODE_MAJOR_VERSION" $VERSIONPATH | awk '{print $3}')
ECODE_MINOR_VERSION=$(grep "define ECODE_MINOR_VERSION" $VERSIONPATH | awk '{print $3}')
ECODE_PATCH_LEVEL=$(grep "define ECODE_PATCH_LEVEL" $VERSIONPATH | awk '{print $3}')
ECODE_VERSION="$ECODE_MAJOR_VERSION"."$ECODE_MINOR_VERSION"."$ECODE_PATCH_LEVEL"
fi

export APPIMAGETOOL="appimagetool"

if ! command -v appimagetool &> /dev/null
then
    wget -nc "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-$(arch).AppImage"
    chmod +x "./appimagetool-$(arch).AppImage"
    ./appimagetool-"$(arch)".AppImage --appimage-extract
    APPIMAGETOOL="./squashfs-root/AppRun"
fi

ECODE_NAME=ecode-linux-"$ECODE_VERSION"-"$ARCH"

if [ -n "$DEBUG_SYMBOLS" ];
then
    cp -r ecode.app ecode
    rm ecode/.DirIcon
    mv ecode/AppRun ecode/ecode
    7za a -t7z "$ECODE_NAME"-with-debug-symbols.7z ecode -mx9 -mmt"$(nproc)"
    rm -rf ecode
    objcopy -S ecode.app/ecode.bin ecode.app/ecode.bin
    objcopy -S ecode.app/libs/libeepp.so ecode.app/libs/libeepp.so
fi

echo "Generating $ECODE_NAME.AppImage"
$APPIMAGETOOL ecode.app "$ECODE_NAME".AppImage

rm -f ecode.app/.DirIcon
mv ecode.app/AppRun ecode.app/ecode
mv ecode.app ecode
rm -rf ./squashfs-root

echo "Generating $ECODE_NAME.tar.gz"
tar -czf "$ECODE_NAME".tar.gz ecode

mv ecode ecode.app
