#!/bin/bash
set -e

unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=linux ;;
Darwin*) machine=macosx ;;
MINGW*) machine=windows ;;
*) machine="unhandled:${unameOut}" ;;
esac

CONFIG=debug

for var in "$@"; do
    if [[ $var = "release" ]]; then
        CONFIG=release
    elif [ "$var" = "memory" ]; then
        echo Will perform memory checks...
        UTILITY='leaks --atExit --'
        shift
    elif [ "$var" = "lldb" ]; then
        echo Starting debugger...
        UTILITY='lldb'
        shift
    fi
done

if [[ ! -f "dependencies/bin/premake5" ]]; then
    mkdir -p dependencies/bin
    pushd dependencies
    if [[ $machine = "macosx" ]]; then
        # v5.0.0-beta2 doesn't support apple silicon properly, update the branch
        # once a stable one is avaialble that supports it
        git clone --depth 1 --branch master https://github.com/premake/premake-core.git
        pushd premake-core
        if [[ $LOCAL_ARCH == "arm64" ]]; then
            PREMAKE_MAKE_ARCH=ARM
        else
            PREMAKE_MAKE_ARCH=x86
        fi
        make -f Bootstrap.mak osx PLATFORM=$PREMAKE_MAKE_ARCH
        cp bin/release/* ../bin
        popd
    elif [[ $machine = "windows" ]]; then
        pushd bin
        curl https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-windows.zip -L -o premake_windows.zip
        unzip premake_windows.zip
        rm premake_windows.zip
        popd
    fi
    popd
fi

export PREMAKE=$PWD/dependencies/bin/premake5

pushd test &>/dev/null

for var in "$@"; do
    if [[ $var = "clean" ]]; then
        echo 'Cleaning...'
        rm -fR out
    fi
done

mkdir -p out

if [[ $machine = "macosx" ]]; then
    TARGET=gmake2
elif [[ $machine = "windows" ]]; then
    TARGET=vs2022
fi

pushd ../../../
PACKAGES=$PWD
popd

export PREMAKE_PATH="$PACKAGES/runtime/dependencies/export-compile-commands":"$PACKAGES/runtime/build":"$PREMAKE_PATH"

PREMAKE_COMMANDS="--with_rive_text --with_rive_audio=external --config=$CONFIG"

out_dir() {
    echo "out/$CONFIG"
}
if [[ $machine = "macosx" ]]; then
    OUT_DIR="$(out_dir)"
    $PREMAKE $TARGET $PREMAKE_COMMANDS --out=$OUT_DIR
    pushd $OUT_DIR
    make -j$(($(sysctl -n hw.physicalcpu) + 1))
    popd
    $UTILITY $OUT_DIR/tests
elif [[ $machine = "windows" ]]; then
    if [[ -f "$PROGRAMFILES/Microsoft Visual Studio/2022/Enterprise/Msbuild/Current/Bin/MSBuild.exe" ]]; then
        export MSBUILD="$PROGRAMFILES/Microsoft Visual Studio/2022/Enterprise/Msbuild/Current/Bin/MSBuild.exe"
    elif [[ -f "$PROGRAMFILES/Microsoft Visual Studio/2022/Community/Msbuild/Current/Bin/MSBuild.exe" ]]; then
        export MSBUILD="$PROGRAMFILES/Microsoft Visual Studio/2022/Community/Msbuild/Current/Bin/MSBuild.exe"
    fi
    OUT_DIR="$(out_dir)"
    echo $PREMAKE $TARGET $PREMAKE_COMMANDS --out=$OUT_DIR
    ls -l
    $PREMAKE $TARGET $PREMAKE_COMMANDS --out=$OUT_DIR
    pushd $OUT_DIR
    "$MSBUILD" rive.sln -m:$NUMBER_OF_PROCESSORS
    popd
    $OUT_DIR/tests.exe
fi

popd &>/dev/null
