#!/bin/bash
##############################################################################
### osx sux, has no proper readlink.
check_darwin() {
  BLUTBAD_BIN=$(perl -e 'use Cwd "abs_path";print abs_path(shift)' $0)
  BLUTBAD_BIN=$(dirname $BLUTBAD_BIN)
  BLUTBAD_HOME=$(dirname $BLUTBAD_BIN)
}

check_linux() {
  BLUTBAD_BIN=$(dirname $(readlink -f $0))/../
  BLUTBAD_HOME=$(readlink -f $BLUTBAD_BIN)
  BLUTBAD_BIN=$BLUTBAD_HOME/bin
}

##############################################################################
OSTYPE=`uname -s`
CWD=`pwd`
if [ "$OSTYPE" = "Darwin" ]; then
  check_darwin
else
  check_linux
fi

#############################################################################
cd $BLUTBAD_HOME
CWD=`pwd`
#echo "Running blutbad from $CWD"

##############################################################################
if [ "$JAVA_HOME" = "" ] ; then
  echo "Attempt to reference standard java location on system: /usr/bin."
  #echo "Please set JAVA_HOME"
  #exit -1
  JAVA_HOME=/usr
fi

##############################################################################
CONSCZ=czlab.blutbad.cons.con7
MAINCZ=czlab.blutbad.exec
JCMD=$JAVA_HOME/bin/java
LIBS=$BLUTBAD_HOME/lib/*
VMOPTS="{{vmopts}}"
AGENT="{{agent}}"


##############################################################################
if [ ! -e "logs" ]; then
  mkdir "logs"
fi

if [ ! -d "logs" ]; then
  echo "error: directory [logs] is not found."
fi

##############################################################################
run_console() {
  local opts=$@
  exec sh -c \
    "exec $JCMD $VMOPTS -cp \"$LIBS\" $CONSCZ --home \"$BLUTBAD_HOME\" $opts"
}

##############################################################################
get_procid() {
  pid=$(ps -ef | grep -F $MAINCZ | grep -v grep | awk '{print $2}')
}

##############################################################################
show_proc() {
  get_procid
  if [ -n "$pid" ]; then
    echo "blutbad is running with process-id: ${pid}."
  else
    echo "blutbad is not running."
  fi
}

##############################################################################
kill_proc() {
  get_procid
  if [ -n "$pid" ]; then
    echo "blutbad is stopping with process-id: ${pid}."
    kill $pid
  fi
}

##############################################################################
run_proc() {
  get_procid
  if [ -n "$pid" ]
  then
    echo "blutbad is already running with process-id: ${pid}."
  elif [ "$2" = "-b" -o "$2" = "--background" ]
  then
    run_proc_bg
  else
    run_proc_fg
  fi
}

##############################################################################
stop_proc() {
  exec sh -c \
    "exec $JCMD $VMOPTS -cp \"$LIBS\" czlab.blutbad.cons.con4 --home \"$BLUTBAD_HOME\" $@"
}

##############################################################################
run_proc_bg() {
  exec sh -c \
    "exec nohup $JCMD $VMOPTS -cp \"$LIBS\" $MAINCZ --home \"$BLUTBAD_HOME\" $@ > /dev/null 2>&1 &"
}

##############################################################################
run_proc_fg() {
  exec sh -c \
    "exec $JCMD $VMOPTS -cp \"$LIBS\" $MAINCZ --home \"$BLUTBAD_HOME\" $@"
}

##############################################################################
debug_proc_fg() {
  exec sh -c \
    "exec $JCMD $VMOPTS -cp \"$LIBS\" $AGENT $MAINCZ --home \"$BLUTBAD_HOME\" $@"
}

##############################################################################
debug_proc_bg() {
  exec sh -c \
    "exec nohup $JCMD $VMOPTS -cp \"$LIBS\" $AGENT $MAINCZ --home \"$BLUTBAD_HOME\" $@ > /dev/null 2>&1 &"
}

##############################################################################
debug_proc() {
  get_procid
  if [ -n "$pid" ]
  then
    echo "blutbad is already running with process-id: ${pid}."
  elif [ "$2" = "-b" -o "$2" = "--background" ]
  then
    debug_proc_bg
  else
    debug_proc_fg
  fi
}

##############################################################################
case $1 in
  start | run ) run_proc $@ ;;
  debug ) debug_proc $@ ;;
  status ) show_proc $@ ;;
  kill ) kill_proc $@ ;;
  stop ) stop_proc $@ ;;
  *) run_console $@ ;;
esac


##############################################################################
#EOF

