#!/bin/bash

getEmbeddedJDKPath() {
    DONE=false
    until $DONE; do
    read line || DONE=true
    
    # reading each line
    if [[ $line == TIZEN_SDK_INSTALLED_PATH* ]]; then 
        sdkPath="$(cut -d'=' -f2 <<<$line)";
    fi
    if [[ $line == TIZEN_SDK_DATA_PATH* ]]; then 
        sdkDataPath="$(cut -d'=' -f2 <<<$line)"
    fi
    if [[ $line == JDK_PATH* ]]; then 
        sdkInfoJDKPath="$(cut -d'=' -f2 <<<$line)"
    fi
    
    done < "$1"
}

createlogFile(){
    date_time=$(date +"%Y%m%d%H%M%S")
    fileName="deviceManagerLog_$date_time.txt"
    if [ ! -d "${sdkDataPath}/" ]; then
        mkdir -p "${sdkDataPath}/device-manager/logs"  
    fi
    logFilePath="$sdkDataPath/device-manager/logs/$fileName"
    touch "$logFilePath"
    logFile="$logFilePath"
}

setJavaExecPath(){
    # extract the sdkPath, sdkDataPath, sdkInfoJDKPath
    getEmbeddedJDKPath $sdkInfoPath
    logMessage=""
    # update JAVA_EXEC if JDK_PATH specified(and exists) in sdk.info
    if [ -d "$sdkInfoJDKPath" ]; then
        # jdk directory exixts
        JDK_PATH="$sdkInfoJDKPath"
        logMessage="${logMessage}Using Sdk.info java at ${JDK_PATH}"$'\n'
    elif [[ "$sdkInfoJDKPath" != "" ]]; then 
        logMessage="${logMessage}Jdk specified in sdk.info:${sdkInfoJDKPath} does not exist."$'\n'
    fi


    if [ ! -d "$JDK_PATH" ]; then 
        JAVA_EXEC="java"
        logMessage="${logMessage}Using System java"$'\n'
    else
        UNAME=$(uname)
        case "$UNAME" in
        Linux)
                JAVA_EXEC="$JDK_PATH/bin/java"
            ;;
        Darwin)
                JAVA_EXEC="$JDK_PATH/Contents/Home/bin/java"
            ;;
        esac
    fi

    if [[ ${logMessage} != ""  ]]; then 
        # make the log file
        createlogFile
        echo "${logMessage}">>${logFile}
    fi
}



BOOTCLASSPATH=""
CLASSPATH=""

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

# find current directory
CURRENT_DIR="$(pwd -P)"
# find device manager binary in current dir first
DEVICE_JAR="device-ui-3.0.jar"
if [ -f "$CURRENT_DIR/$DEVICE_JAR" ]
then
    DEVICE_PATH="$CURRENT_DIR"
elif [ -f "$SCRIPT_DIR/$DEVICE_JAR" ]
then
    DEVICE_PATH="$SCRIPT_DIR"
elif [ -f "$SCRIPT_DIR/../../../$DEVICE_JAR" ]
then
    # we are in app directory
    DEVICE_PATH="$SCRIPT_DIR/../../.."
    IN_APP="yes"
else
    echo "Can not find $DEVICE_JAR"
    exit
fi

IDE_PLUGIN_PATH="$DEVICE_PATH/../../../ide/plugins/*"
MAC_IDE_PLUGIN_PATH="$DEVICE_PATH/../../../TizenStudio.app/Contents/Eclipse/plugins/*"
DEVICE_PATH_JAR="$DEVICE_PATH/$DEVICE_JAR"

JDK_PATH="$DEVICE_PATH/../../../jdk"
sdkInfoPath="$DEVICE_PATH/../../../sdk.info"
setJavaExecPath

# 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 \"device-manager.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

CLASSPATH="$DEVICE_PATH_JAR:$IDE_PLUGIN_PATH:$MAC_IDE_PLUGIN_PATH:$CLASSPATH"
export SWT_GTK3=0
# run
if [ -z "$IN_APP" ]
then
    $JAVA_EXEC -Xbootclasspath/a:"$BOOTCLASSPATH" -cp "$CLASSPATH":. org.tizen.device.manager.Main "$@"
else
    $JAVA_EXEC -Xbootclasspath/a:"$BOOTCLASSPATH" -cp "$CLASSPATH":. org.tizen.device.manager.Main
fi
