#!/bin/bash
# SeokYeon Hwang <syeon.hwang@samsung.com>

BOOTCLASSPATH=""
CLASSPATH=""

# find directory of script file
SCRIPT_DIR="$(cd "$(dirname "$0")" ; pwd -P)"

# find current directory
CURRENT_DIR="$(pwd -P)"

# find ECP binary in current dir first
JAR_BINARY="emulator-control-panel.jar"
if [ -f "$CURRENT_DIR/$JAR_BINARY" ]
then
    JAR_PATH="$CURRENT_DIR/$JAR_BINARY"
elif [ -f "$SCRIPT_DIR/$JAR_BINARY" ]
then
    JAR_PATH="$SCRIPT_DIR/$JAR_BINARY"
elif [ -f "$SCRIPT_DIR/../../../$JAR_BINARY" ]
then
    # we are in .app directory
    JAR_PATH="$SCRIPT_DIR/../../../$JAR_BINARY"
else
    echo "Can not find $JAR_BINARY"
    exit
fi


# find JRE_HOME
UNAME=$(uname)
case "$UNAME" in
Linux)
    JRE_HOME="$(dirname $(dirname $(readlink -f $(which java))))"
    ;;
Darwin)
    JAVA_DIR=$(dirname $(readlink $(which java)))
    if [ -f "$JAVA_DIR/java_home" ]
    then
        JRE_HOME=$($JAVA_DIR/java_home)
    else
        JRE_HOME="$(readlink $JAVA_DIR)"/../
    fi
    ;;
MINGW*)
    echo "Please execute \"emulator-control-panel.exe\""
    exit
    ;;
esac

if [ -d "$JRE_HOME/jre" ]
then
        JRE_HOME="$JRE_HOME/jre"
fi

# find jfxrt.jar
JFXRT_JAR="jfxrt.jar"
JFXRT_PATH="$JRE_HOME/lib/ext/$JFXRT_JAR"
if [ -f "$JFXRT_PATH" ]
then
    # java 8 or above
    # we have nothing to do
    :
else
    JFXRT_PATH="$JRE_HOME/lib/$JFXRT_JAR"
    if [ -f "$JFXRT_PATH" ]
    then
        # java 7u6 or above
        # use JRE providing one
        BOOTCLASSPATH="$BOOTCLASSPATH:$JFXRT_PATH"
    else
        # java 7u5 or below
        # try to run with our own
        JFXRT_PATH="$SCRIPT_DIR/$JFXRT_JAR"
        if [ -f "$JFXRT_PATH" ]
        then
            CLASSPATH="$CLASSPATH:$JFXRT_PATH"
        fi
    fi
fi

# find java
if [ -f "$JRE_HOME/bin/java" ]
then
    JAVA=$JRE_HOME/bin/java
else
    JAVA=java
fi

USE_SYSTEM_PROXY=-Djava.net.useSystemProxies=true
# parse jvm options
JVM_OPTS=( )
i=0
ECP_OPTS=( )
j=0
for arg in "$@"
do
    case $arg in
        "-"*)
        JVM_OPTS[$i]="$arg"
        shift
        i=$((i+1))
        ;;
        *)
        ECP_OPTS[$j]="$arg"
        shift
        j=$((j+1))
        ;;
    esac
done

# Add support for OpenJDK
# JAVAFx lib should be present downloaded and placed in JAVA installation lib folder from JAVA 11.

OLDIFS=$IFS
version=$("$JAVA" -version 2>&1 | awk -F '"' '/version/ {print $2}')
IFS='.' tokens=( $version )
majorVer=${tokens[0]}
IFS=$OLDIFS

if [ $majorVer -ge 9 ]; then
  if [[ $(java -version 2>&1) == *"OpenJDK"* ]];then
    JRE_OPT="--module-path $JRE_HOME/lib/javafx.graphics.jar:$JRE_HOME/lib/javafx.media.jar:$JRE_HOME/lib/javafx.web.jar:$JRE_HOME/lib/javafx.controls.jar:$JRE_HOME/lib/javafx.fxml.jar:$JRE_HOME/lib/javafx.base.jar --add-exports=javafx.base/com.sun.javafx=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED --add-modules=java.xml.bind --add-modules=javafx.web --add-modules=javafx.controls --add-modules=javafx.fxml -XX:+IgnoreUnrecognizedVMOptions "
  else
    JRE_OPT="--add-modules=java.xml.bind -XX:+IgnoreUnrecognizedVMOptions "
  fi
else
  JRE_OPT=""
fi


# run
$JAVA $JRE_OPT -Xbootclasspath/a:"$BOOTCLASSPATH" -cp "$CLASSPATH" $USE_SYSTEM_PROXY ${JVM_OPTS[@]} -jar "$JAR_PATH" ${ECP_OPTS[@]}
