#!/usr/bin/env bash
# Summary: Add JDK into jenv. A alias name will be generated by parsing "java -version"
# Usage: jenv add /path/to/java_home
set -e
[ -n "$JENV_DEBUG" ] && set -x

# Provide jenv completions
if [ "$1" = "--complete" ]; then
  echo "--skip-existing"
  for d in ${!#}*; do
    [[ -d "$d" ]] && echo $d/
  done
  exit
fi

version_added=false

# Display colorized information output
function cinfo() {
	COLOR='\033[01;32m'	# bold green
	RESET='\033[00;00m'	# normal white
	echo -e "${COLOR}$*${RESET}"
}

# Display colorized warning output
function cwarn() {
	COLOR='\033[01;31m'	# bold red
	RESET='\033[00;00m'	# normal white
	echo -e "${COLOR}$*${RESET}"
}


function add_alias_check(){
	if [ -h "${JENV_ROOT}/versions/$1" ];
	then
		   if [ "$JENV_SKIP" = false ]; then
			cwarn "There is already a $1 JDK managed by jenv"
			read -p "Do you want to override (type y to confirm)? " -n 1 -r
			echo ""
			if [[ $REPLY =~ ^[Yy]$ ]]
				then
					rm -f "${JENV_ROOT}/versions/$1"
					add_alias "$1"
				fi
			else
				cinfo " $1 already present, skip installation"
			fi

	else
           add_alias "$1"

	fi
}

function add_alias(){
	cd "${JENV_JAVAPATH}"
    JENV_JAVAPATH=$PWD
    cd - 2>&1 > /dev/null
	ln -s  "${JENV_JAVAPATH}" "${JENV_ROOT}/versions/$1"
	touch ${JENV_ROOT}/$1.time
    cinfo "$1 added"
    version_added=true

}

JENV_JAVAPATH="$1"
JENV_VERSION_FILE=".jenv-version"


if [ "$#" -eq 2 ]; then
	cwarn "Warning : jenv add alias path/to/java_home is deprecated."
	cwarn "Please prefer to let jenv generate unique alias name by using"
	echo ""
	cwarn "    $ jenv add path/to/java_home"
	echo ""

	JENV_JAVAPATH="$2"
	JENV_ALIAS="$1"

    add_alias_check $JENV_ALIAS
    if $version_added ; then
        $(jenv-rehash)
    fi;

    exit 0
fi;

if [ -f "${JENV_JAVAPATH}/bin/java" ]; then
    if [ -z "${JENV_ALIAS}" ]; then
        JAVA_VERSION_OUTPUT=`"${JENV_JAVAPATH}"/bin/java -version 2>&1`
        JAVA_VERSION=`"${JENV_JAVAPATH}"/bin/java -version 2>&1 | grep 'version' | head -n 1 | cut -d\" -f 2 `
        JAVA_VERSION=${JAVA_VERSION/_/.}

        case "${JAVA_VERSION_OUTPUT}" in
            *HotSpot*)      JAVA_PROVIDER="oracle" ;;
            *Zulu*)         JAVA_PROVIDER="zulu" ;;
            *GraalVM*)      JAVA_PROVIDER="graalvm" ;;
            *Corretto*)     JAVA_PROVIDER="corretto" ;;
            *J9*)           JAVA_PROVIDER="ibm" ;;
            *sapmachine*)   JAVA_PROVIDER="sap" ;;
            *SapMachine*)   JAVA_PROVIDER="sap" ;;
            *SAP*)          JAVA_PROVIDER="sap" ;;
            *OpenJDK*)      JAVA_PROVIDER="openjdk" ;;
            *)              JAVA_PROVIDER="other" ;;
        esac
    fi;

    if [ $JAVA_PROVIDER=="sap" ]; then
        JAVA_PLATFORM="64"
    else
        if ${JENV_JAVAPATH}/bin/java -version 2>&1 | grep -q "64-Bit"; then
            JAVA_PLATFORM="64"
        else
            JAVA_PLATFORM="32"
        fi;
    fi;

    JENV_ALIAS="${JAVA_PROVIDER}${JAVA_PLATFORM}-${JAVA_VERSION}"

    JAVA_SHORTVERSION=$(sed 's/\([0-9]\.[0-9]\).*/\1/' <<< $JAVA_VERSION)
    JAVA_SHORTESTVERSION=$(sed 's/\([0-9]\+\)\.\?.*/\1/' <<< $JAVA_VERSION)

    add_alias_check $JENV_ALIAS
    add_alias_check $JAVA_VERSION

    if [ "$JAVA_SHORTVERSION" != "$JAVA_VERSION" ]; then
    	add_alias_check $JAVA_SHORTVERSION
    fi;

    # don't add shortest version for jdk 1.x
    if [ "$JAVA_SHORTESTVERSION" != 1 -a "$JAVA_SHORTESTVERSION" != "$JAVA_SHORTVERSION" ]; then
        add_alias_check $JAVA_SHORTESTVERSION
    fi

    if $version_added ; then
    	$(jenv-rehash)
    fi;
else
	cwarn "${JENV_JAVAPATH} is not a valid path to java installation"
fi;
