#!/bin/bash

set -e

# Include the wrappers utility script
. /usr/lib/java-wrappers/java-wrappers.sh

find_java_runtime default

if [ -z "$PATH_TO_VNU_JAR" ]; then
  PATH_TO_VNU_JAR="/usr/share/java"
fi

if [ "$DEBUG_WRAPPER" ]; then
  java_debug "Path to vnu.jar: $PATH_TO_VNU_JAR"
fi

ARGS=()

while [[ $# -ge 1 ]]; do
  case "$1" in
  -r | --return-when-ready)
    RETURN_WHEN_READY=1
    ;;
  -s | --stop)
    # Kill running instance
    STOP=1
    ;;
  *)
    ARGS+=("$1")
    ;;
  esac
  shift
done

if [ "$RETURN_WHEN_READY" = 1 ] && [ "$STOP" = 1 ]; then
  echo "Cannot use both --return-when-ready & --stop at the same time."
  exit 1
fi

if [ -z "${ARGS[*]}" ]; then
  REGEX=".* nu\.validator\.servlet\.Main$"
else
  REGEX=".* nu\.validator\.servlet\.Main ${ARGS[*]}$"
fi

if [ "$STOP" = 1 ]; then
  PID=$(pgrep -f "$REGEX")
  if [ ! -z "$PID" ]; then
    echo "$PID"
    # shellcheck disable=SC2086
    kill $PID
    # shellcheck disable=SC2086
    while kill -0 $PID 2>/dev/null; do
      #echo "wait"
      sleep 0.2
    done
  else
    echo "No process found matching 'nu.validator.servlet.Main ${ARGS[*]}'"
    exit 1
  fi
  exit
fi

if [ "$(dpkg --print-architecture)" = "i386" ]; then
  JAVA_ARGS="-Xss2048k $JAVA_ARGS"
fi

find_jars "$PATH_TO_VNU_JAR"/vnu.jar

find_jars /usr/share/vnu/galimatias.jar /usr/share/vnu/langdetect.jar /usr/share/vnu/jing.jar /usr/share/java/css-validator.jar /usr/share/java/commons-codec.jar /usr/share/java/commons-fileupload.jar /usr/share/java/commons-io.jar /usr/share/java/commons-logging.jar /usr/share/java/httpclient.jar /usr/share/java/httpcore.jar /usr/share/java/icu4j.jar /usr/share/java/isorelax.jar /usr/share/java/javax.json.jar /usr/share/java/javax.json-api.jar /usr/share/java/log4j-1.2.jar /usr/share/java/salvation.jar /usr/share/java/saxon.jar /usr/share/java/saxonb.jar /usr/share/java/servlet-api.jar /usr/share/java/slf4j-api.jar /usr/share/java/slf4j-log4j12.jar /usr/share/java/xalan2.jar /usr/share/java/htmlparser.jar /usr/share/java/jetty9-http.jar /usr/share/java/jetty9-io.jar /usr/share/java/jetty9-security.jar /usr/share/java/jetty9-server.jar /usr/share/java/jetty9-servlet.jar /usr/share/java/jetty9-servlets.jar /usr/share/java/jetty9-util-ajax.jar /usr/share/java/jetty9-util.jar

PORT="${ARGS[0]}"

if nc -z localhost "${PORT:-8888}" >/dev/null 2>&1; then
  echo "v.Nu (Nu Html Checker) is already up and running at http://localhost:${PORT:-8888}"
  exit 1
fi

if [ "$RETURN_WHEN_READY" = 1 ]; then
  count=0
  run_java nu.validator.servlet.Main "${ARGS[@]}" &
  while ! nc -z localhost "${PORT:-8888}" >/dev/null 2>&1; do
    if [ $count -gt 60 ]; then
      break
    fi
    count=$((count + 1))
    sleep 1
  done
  if [ ! $count -gt 60 ]; then
    echo "v.Nu (Nu Html Checker) is now up and running at http://localhost:${PORT:-8888}"
    echo "Startup took $count seconds."
    exit
  else
    echo "v.Nu (Nu Html Checker) failed starting up in less than 60 seconds"
    exit 1
  fi
else
  run_java nu.validator.servlet.Main "${ARGS[@]}"
fi
