#!/bin/bash

# shellcheck disable=SC2009
# shellcheck disable=SC2143

DOC_SIGN_HOME=/usr/share/docsigning_watch_folder
PID_DIR=/run/docsigning_watch_folder
PID_FILE=$PID_DIR/docsigning_watch_folder.pid
LOG_FILE=$DOC_SIGN_LOG_PATH/docsigning.log
JAR_FILE_NAME=doc_signing_watch_folder-2.1.0.jar

JAVA_OPTS="$JAVA_OPTS -Xms128m -Xmx1024m -XX:+UseSerialGC"

init()
{
  # Created folders
  echo "${DOC_SIGN_HOME}" >&2
  echo "${JAVA_HOME}" >&2
  mkdir -p "${DOC_SIGN_HOME}" && mkdir -p "${PID_DIR}"

  JAVA="java";
  JAVA_TYPE="SYSTEM_JDK";

  echo "Used Java is $JAVA_TYPE at $JAVA" >&2
}

init

LAUNCHER_CLASSPATH="${DOC_SIGN_HOME}/${JAR_FILE_NAME}"
START_COMMAND="${JAVA} ${JAVA_OPTS} -Dlog4j.configurationFile=${DOC_SIGN_HOME}/log4j2.xml -cp ${LAUNCHER_CLASSPATH} com.ssl.doc.signing.watch.folder.App"

start() {
  PID=$($START_COMMAND >> "${LOG_FILE}" & echo $!)
}

case "$1" in
start)
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if [ -z "$(ps axf | grep "${PID}" | grep -v grep)" ]; then
            start
        else
            echo "Already running [$PID]"
            exit 0
        fi
    else
        start
    fi

    if [ -z "$PID" ]; then
        echo "Failed starting"
        exit 1
    else
        echo "$PID" > "$PID_FILE"
        echo "Started [$PID]"
        echo "PID File: $PID_FILE"
        exit 0
    fi
;;

status)
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if [ -z "$(ps axf | grep "${PID}" | grep -v grep)" ]; then
            echo "Not running (process dead but PID file exists)"
            exit 1
        else
            echo "Running [$PID]"
            exit 0
        fi
    else
        echo "Not running"
        exit 0
    fi
;;
stop)
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if [ -z "$(ps axf | grep "${PID}" | grep -v grep)" ]; then
            echo "Not running (process dead but PID file exists)"
            rm -f "$PID_FILE"
            exit 1
        else
            PID=$(cat "$PID_FILE")
            kill -term "$PID"
            echo "Stopped [$PID]"
            rm -f "$PID_FILE"
            exit 0
        fi
    else
        echo "Not running (PID not found)"
        exit 0
    fi
;;
restart)
    $0 stop
    $0 start
;;
*)
    echo "Usage: $0 {status|start|stop|restart}"
    exit 0
esac