#!/bin/bash

HOST="127.0.0.1"
PORT=5000
USER=$USER
STDOUT=0
DAEMONIZE=0

usage() {
  echo "NEST Server "`version`
  echo "-----------------"
  echo "Usage: $0 log|status|start|stop|restart [-d] [-o] [-h <HOST>] [-p <PORT>] [-u <UID>]" >&2; exit 1
}

log() {
  tail -f /tmp/nest-server.log
}

pid() {
  pgrep -f "uwsgi --module nest_server.main:app --http-socket $HOST:$PORT --uid $USER"
}

ps-aux() {
  ps aux | grep "[u]wsgi --module nest_server.main:app"
}

ps-check() {
  status | grep "$HOST:$PORT"
}

ps-cmd() {
  ps-aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
}

start() {
  echo "NEST Server "`version`
  echo "-----------------"

  if [ "`ps-check`" ]; then
    echo "NEST Server is already serving at http://$HOST:$PORT."
  else
    if [ $STDOUT == 0 ]; then
      uwsgi --module nest_server.main:app --http-socket $HOST:$PORT --uid $USER --daemonize "/tmp/nest-server.log"
      echo "NEST Server is serving at http://$HOST:$PORT."
      if [ $DAEMONIZE == 0 ]; then
        read -p "Press any key to stop... "
        stop
      fi
    else
      uwsgi --module nest_server.main:app --http-socket $HOST:$PORT --uid $USER
    fi
  fi
}

status() {
  printf "HTTP-SOCKET\t\tUID\n"
  ps-cmd | awk '{ for(i=1;i<=NF;i++) {if ( i == 5 || i == 7 ) printf $i"\t\t"}; printf "\n" }'
}

stop() {
  if [ `pid` ]; then
    kill -9 `pid`
    echo "NEST Server serving at http://$HOST:$PORT has stopped."
  else
    echo "NEST Server is not serving at http://$HOST:$PORT."
  fi
}

version() {
   python3 -c "from nest_server import __version__; print(__version__)"
}

CMD=$1; shift
while getopts "dh:op:u:" opt; do
    case $opt in
        d) DAEMONIZE=1 ;;
        h) HOST=$OPTARG ;;
        o) STDOUT=1 ;;
        p) PORT=$OPTARG ;;
        u) USER=$OPTARG ;;
    esac
done

case "$CMD" in
  log) log ;;
  pid) pid ;;
  restart) stop; sleep .5; start ;;
  start)   start ;;
  status)  status ;;
  stop)    stop ;;
  version) version ;;
  *) usage ;;
esac
