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

# $1: optional setup
function doSetup() {
  if [ -n "${1}" ]
  then
    doDevonCommand java -q setup
  fi
  if [ -n "${1}" ] || [ ! -d "${SONARQUBE_HOME}" ]
  then
    local software_version=${SONARQUBE_VERSION:-7.9.1}
    local mirror="https://binaries.sonarsource.com/Distribution/sonarqube/"
    local download_url="${mirror}/sonarqube-${software_version}.zip"
    doInstall "${SONARQUBE_HOME}" "${download_url}" "sonarqube" "${software_version}" "" "-"
  fi
  if [ -n "${1}" ]
  then
    echo doRunCommand "'${SONAR}' -v" "verify installation of sonarqube"
  fi
}

function doStart() {
  doSonar start
}

function doStop() {
  doSonar stop
}

function doSonar() {
  doSetup
  if doIsWindows
  then
    if [ "${1}" = "start" ]
    then
      # "${SONARQUBE_HOME}/bin/windows-x86-64/StartNTService.bat"
      "${SONARQUBE_HOME}/bin/windows-x86-64/StartSonar.bat"
    elif [ "${1}" = "stop" ]
    then
      "${SONARQUBE_HOME}/bin/windows-x86-64/StopNTService.bat"
    else
      doFail "Unknown sonar command: ${1}"
    fi
  elif doIsMacOs
  then
    "${SONARQUBE_HOME}/bin/macosx-universal-64/sonar.sh" "${1}"
  else
    "${SONARQUBE_HOME}/bin/linux-x86-64/sonar.sh" "${1}"
  fi
  if [ "${1}" = "start" ]
  then
    echo "SonarQube is running at localhost on the following port (default 9000):"
    grep "sonar.web.port" "${SONARQUBE_HOME}/conf/sonar.properties"
  fi
}

function doAnalyze() {
  doDevonCommand mvn sonar:sonar
}

# CLI
SONARQUBE_HOME="${DEVON_IDE_HOME}/software/sonarqube"
if [ "${1}" = "-h" ] || [ "${1}" = "help" ]
then
  echo "Setup or run SonarQube server on local machine."
  echo
  echo "Arguments:"
  echo " start                    start local SonarQube server"
  echo " stop                     stop local SonarQube server"
  echo " setup                    setup SonarQube (install, verify, configure)"
  echo " analyze                  analyze current project with SonarQube"
  echo
  echo "Options:"
elif [ "${1}" = "setup" ]
then
  doSetup setup
elif [ "${1}" = "start" ]
then
  doStart
elif [ "${1}" = "stop" ]
then
  doStop
elif [ "${1}" = "analyze" ]
then
  shift
  doAnalyze "${@}"
else
  doFail "undefined argument ${*}"
fi