#!/usr/bin/env bash

# Check for color support
if [ -t 1 ]; then
	ncolors=$( tput colors )
	if [ -n "${ncolors}" -a "${ncolors}" -ge 8 ]; then
		if normal="$( tput sgr0 )"; then
			# use terminfo names
			red="$( tput setaf 1 )"
			green="$( tput setaf 2)"
		else
			# use termcap names for FreeBSD compat
			normal="$( tput me )"
			red="$( tput AF 1 )"
			green="$( tput AF 2)"
		fi
	fi
fi

# Track the pid if we can find it
read pid 2>/dev/null <run.pid
is_pid_valid=$?

# Swap out the API port if the --testnet (or -t) argument is specified
api_port=12391
if [[ "$@" = *"--testnet"* ]] || [[  "$@" = *"-t"* ]]; then
  api_port=62391
fi

# Attempt to locate the process ID if we don't have one
if [ -z "${pid}" ]; then
  pid=$(ps aux | grep '[q]ortal.jar' | head -n 1 | awk '{print $2}')
  is_pid_valid=$?
fi

# Locate the API key if it exists
apikey=$(cat apikey.txt)
success=0

# Try and stop via the API
if [ -n "$apikey" ]; then
  echo "Stopping Qortal via API..."
  if curl --url "http://localhost:${api_port}/admin/stop?apiKey=$apikey" 1>/dev/null 2>&1; then
    success=1
  fi
fi

# Try to kill process with SIGTERM
if [ "$success" -ne 1 ] && [ -n "$pid" ]; then
  echo "Stopping Qortal process $pid..."
  if kill -15 "${pid}"; then
    success=1
  fi
fi

# Warn and exit if still no success
if [ "$success" -ne 1 ]; then
  if [ -n "$pid" ]; then
    echo "${red}Stop command failed - not running with process id ${pid}?${normal}"
  else
    echo "${red}Stop command failed - not running?${normal}"
  fi
  exit 1
fi

if [ "$success" -eq 1 ]; then
  echo "Qortal node should be shutting down"
  if [ "${is_pid_valid}" -eq 0 ]; then
    echo -n "Monitoring for Qortal node to end"
    while s=`ps -p $pid -o stat=` && [[ "$s" && "$s" != 'Z' ]]; do
      echo -n .
      sleep 1
    done
    echo
    echo "${green}Qortal ended gracefully${normal}"
    rm -f run.pid
  fi
fi

exit 0