#!/bin/bash

. /etc/rc.d/init.d/functions

SERVICE_NAME="UniFi Controller"
PATH_TO_JAVA=/usr/bin/java
PATH_TO_JAR=/var/UniFi/lib/ace.jar
MEM_LIMIT=1024M
PID_FILE=/var/run/unifi.pid

start() {
  if [ -f $PID_FILE ]; then

    PID=$(cat $PID_FILE 2>/dev/null)

    if [ -n "$PID" ] && ps -p $PID > /dev/null 2>&1; then
        ps -fp $PID | grep -q "/var/UniFi/lib/ace.jar"
        if [ $? -eq 0 ]; then
            echo -n "$SERVICE_NAME já está rodando!"
            echo_failure
            echo
            return
        fi
    fi

    rm -f $PID_FILE
  fi

  echo -n "Iniciando $SERVICE_NAME: "
  $PATH_TO_JAVA -Xmx$MEM_LIMIT --add-opens java.base/java.time=ALL-UNNAMED -jar $PATH_TO_JAR start &> /dev/null &
  echo $! > $PID_FILE

  echo_success
  echo
}


stop() {

  echo -n "Parando $SERVICE_NAME: "

  # 1. SEMPRE tenta parar via UniFi (mesmo sem PID file)
  $PATH_TO_JAVA -jar $PATH_TO_JAR stop &> /dev/null

  # 2. tenta descobrir PID mesmo sem arquivo
  if [ -f $PID_FILE ]; then
    PID=$(cat $PID_FILE 2>/dev/null)
  else
    PID=$(pgrep -f "/var/UniFi/lib/ace.jar" | head -n 1)
  fi

  # 3. espera processo realmente encerrar
  if [ -n "$PID" ]; then
    for i in 1 2 3 4 5 6 7 8 9 10; do
      ps -p $PID > /dev/null 2>&1 || break
      sleep 1
    done

    # 4. fallback kill se travado
    if ps -p $PID > /dev/null 2>&1; then
      kill -9 $PID 2>/dev/null || true
    fi
  fi

  # 5. limpa PID file sempre (se existir ou não)
  rm -f $PID_FILE

  echo_success
  echo
}

case $1 in
  start)
    start
  ;;
  stop)
    stop
  ;;
  restart)
    stop
    start
  ;;
  status)
    if [ -f $PID_FILE ]; then
      PID=$(cat $PID_FILE);
      echo "$SERVICE_NAME rodando com processo número $PID!"
    else
      echo "$SERVICE_NAME não está rodando!"
    fi
  ;;
*)

echo "usage: service unifi {start|stop|restart|status}"
exit 1
;;

esac
exit 0