#!/bin/bash
#
# Unix (macOS/Linux) command line interface for Juggling Lab
#
# Copyright 2002-2025 Jack Boyce and the Juggling Lab contributors
# Released under the GNU General Public License v2


DIR=$(dirname "$0")
JL_JAR="${DIR}/JugglingLab.jar"
export JL_WORKING_DIR="`pwd`"

if [[ "$OSTYPE" == "darwin"* ]]; then
    # Running on macOS

    # First try launching in JugglingLab.jar in same directory
    if [ -a "${JL_JAR}" ]; then
        if type java >/dev/null 2>&1; then
            _java=java
        elif [[ -n "${JAVA_HOME}" ]] && [[ -x "${JAVA_HOME}/bin/java" ]]; then
            _java="${JAVA_HOME}/bin/java"
        fi

        if [[ "$_java" ]]; then
            version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
            version1=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')
            if [ "$version1" -ge "011000" ]; then
                if [[ $# -ne 0 ]]; then
                    "$_java" -cp "${JL_JAR}" -Xss2048k \
                        -Djava.library.path="${DIR}/ortools-lib/ortools-darwin-aarch64" \
                        --enable-native-access=ALL-UNNAMED jugglinglab.JugglingLab ${1+"$@"}
                    exit 1
                else
                    # print a help message if no command line args
                    "$_java" -cp "${JL_JAR}" jugglinglab.JugglingLab help
                    exit 1
                fi
            fi
        fi
    fi

    # Then try launching in the application bundle
    OSX_JL_EXEC="${DIR}/Juggling Lab.app/Contents/MacOS/Juggling Lab"
    if ! [[ -x "${OSX_JL_EXEC}" ]]; then
        OSX_JL_EXEC="/Applications/Juggling Lab.app/Contents/MacOS/Juggling Lab"
    fi

    if [[ -x "${OSX_JL_EXEC}" ]]; then
        if [[ $# -ne 0 ]]; then
            "${OSX_JL_EXEC}" ${1+"$@"}
            exit 1
        else
            # print a help message if no command line args
            "${OSX_JL_EXEC}" help
            exit 1
        fi
    fi

    echo >&2 "\"Juggling Lab.app\" not found."
else
    # Running on other Unix

    # First try launching in JugglingLab.jar in same directory
    if [ -a "${JL_JAR}" ]; then
        if type java >/dev/null 2>&1; then
            _java=java
        elif [[ -n "${JAVA_HOME}" ]] && [[ -x "${JAVA_HOME}/bin/java" ]]; then
            _java="${JAVA_HOME}/bin/java"
        fi

        if [[ "$_java" ]]; then
            version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
            version1=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')
            if [ "$version1" -ge "011000" ]; then
                if [[ $# -ne 0 ]]; then
                    # include both x86 and Arm versions of OR-Tools
                    # JRE will choose correct one at runtime
                    "$_java" -cp "${JL_JAR}" -Xss2048k \
                        -Djava.library.path="${DIR}/ortools-lib/ortools-linux-x86-64:${DIR}/ortools-lib/ortools-linux-aarch64" \
                        --enable-native-access=ALL-UNNAMED jugglinglab.JugglingLab ${1+"$@"}
                    exit 1
                else
                    # print a help message if no command line args
                    "$_java" -cp "${JL_JAR}" jugglinglab.JugglingLab help
                    exit 1
                fi
            fi
        fi
    fi

    # Then try launching in the application bundle
    UNIX_JL_EXEC="/opt/juggling-lab/bin/Juggling Lab"

    if [[ -x "${UNIX_JL_EXEC}" ]]; then
        if [[ $# -ne 0 ]]; then
            "${UNIX_JL_EXEC}" ${1+"$@"}
            exit 1
        else
            # print a help message if no command line args
            "${UNIX_JL_EXEC}" help
            exit 1
        fi
    fi

    echo >&2 "\"Juggling Lab\" executable not found."
fi
