#!/usr/bin/env bash
# shellcheck source=scripts/functions
source "$(dirname "${0}")"/../functions

# $1: optional setup
function doSetup() {
  if [ -z "${JAVA_HOME}" ]
  then
    export JAVA_HOME="${DEVON_IDE_HOME}/software/java"
    echo "JAVA_HOME is not set, assuming ${JAVA_HOME}"
  fi
  if [ -n "${1}" ] || [ ! -d "${JAVA_HOME}" ]
  then
    local software_version="${JAVA_VERSION:-11.0.4_11}"
    local major_version="${software_version/\.*/}"
    major_version="${major_version/u*/}"
    local jdk_folder="jdk-${software_version/_/%2B}"
    if [ "${major_version}" = "8" ]
    then
      software_version="${software_version/_/b}"
      local jdk_folder="jdk${software_version/b/-b}"
    fi
    local os
    local extension=".tar.gz"
    local software_dir="${JAVA_HOME}"
    if doIsMacOs
    then
      os="mac"
      software_dir="${DEVON_IDE_HOME}/software/jdk"
    elif doIsWindows
    then
      os="windows"
      extension=".zip"
    else
      os="linux"
    fi
    local download_url="https://github.com/AdoptOpenJDK/openjdk${major_version}-binaries/releases/download/${jdk_folder}/OpenJDK${major_version}U-jdk_x64_${os}_hotspot_${software_version}${extension}"
    doInstall "${software_dir}" "${download_url}" "java" "${software_version}"
    if [ ! -d "${JAVA_HOME}" ] && [ -d "${DEVON_IDE_HOME}/software/jdk" ] && [ "${software_dir}" = "${DEVON_IDE_HOME}/software/jdk" ]
    then
      echo "Creating symlink as workaround for Java on MacOS"
      doRunCommand "ln -sf 'jdk/Contents/Home' '${JAVA_HOME}'"
      doExtendPath "${JAVA_HOME}"
    fi
  fi
  if [ -n "${1}" ] && ! doIsQuiet
  then
    doRunCommand "'${JAVA_HOME}/bin/java' -version" "verify installation of Java"
  fi
}

#$@ args (see help)
function doMigrate() {
  doRunConfigurator com.devonfw.tools.ide.migrator.Migrator "${@}"
  exit ${?}
}

# CLI
if [ "${1}" = "-h" ] || [ "${1}" = "help" ]
then
  echo "Install and manage Java."
  echo
  echo "Arguments:"
  echo " setup                              setup Java (install and verify)"
  echo " create «args»                      create new Java project based on devon4j template. If a single argument is provided,"
  echo "                                    this is the package name and is automatically split into groupId and artifactId. Use"
  echo "                                    -DdbType=«db» to choose the database. Any option starting with dash is passed as is."
  echo " migrate [from «version»] [single]  update the current devon4j project to the latest supported version. If for some reasons"
  echo "                                    the current devonfw version (e.g. oasp4j:2.6.0) can not be auto-detected you may provide"
  echo "                                    it manually after the 'from' argument. Also the 'single' option allows to migrate only to"
  echo "                                    the next available version."
  echo
  echo "Options:"
elif [ -z "${1}" ] || [ "${1}" = "setup" ]
then
  doSetup setup
elif [ "${1}" = "create" ]
then
  doSetup
  shift
  doMavenArchetype "${@}"
elif [ "${1}" = "migrate" ]
then
  shift
  doMigrate "${@}"
else
  doFail "Unknown argument ${1}"
fi
