#!/bin/bash

# usage info
function show_help {
cat <<EOF
Usage: ${0##*/} [-h] [-g] [-w] [-e]
Start the hipercam software.

    -h    display this help and exit
    -g    start eso engineering GUI (for debugging)
    -w    run on WHT (no offset script)
    -e    use emulated hardware
EOF
}

function test {
    echo "RUN:  $@"
    "$@"
    local status=$?
    if [ $status -ne 0 ]; then
        echo "error with $1" >&2
    fi
    return $status
}

gui=0
OPTIND=1
offset=1
emulate=""
while getopts hgwe opt; do
    case $opt in
        h)
            show_help
            exit 0
            ;;
        g)  gui=1
            ;;
        w)  offset=0
            ;;
        e)  emulate="-e"
            ;;
        *)
            show_help >&2
            exit 1
            ;;
    esac
done
shift "$((OPTIND-1))"


# standard xterm for various WAMP components to run
XTERM="xterm -bg white -fg black -aw -vb -sb -sl 5000 -rightbar -geometry 80x16 -fa 'Monospace' -fs 8"

# launch server for communication with NGC
HS=`ps ax | grep hserver | wc -l`
if [ $HS -le 1 ]
then
    echo "starting HServer"
    $XTERM -title "HServer" -e "hserver ${emulate}" &
else
    echo "HServer already running ($HS)"
fi

# launch server for File Transfer
username=`whoami`
FS=`ps ax | grep fileserver | wc -l`
if [ $FS -le 1 ]
then
    echo "starting FileServer"
    $XTERM -title "FileServer" -e "fileserver --dir /insroot/${username}/SYSTEM/DETDATA/" &
else
    echo "fileServer already running ($FS)"
fi

# launch gtc WAMP component script
if [ $offset -eq 1 ]
then
    OF=`ps ax | grep gtcserver | wc -l`
    if [ $OF -le 1 ]
    then
        echo "starting GTC server"
        $XTERM -title "GTCserver" -e "gtcserver ${emulate} /insroot/${username}/SYSTEM/DETDATA/" &
    else
        echo "GTC server already running ($OF)"
    fi
fi

# launch WAMP components to talk to all hardware
HWS=`ps ax | grep hwserver | wc -l`
if [ $HWS -le 1 ]
then
    echo "starting Hardware Server"
    $XTERM -title "HWserver" -e "hwserver ${emulate}" &
else
    echo "Hardware server already running"
fi

# start GUI
HD=`ps ax | grep hdriver | wc -l`
if [ $HD -le 1 ]
then
    echo "starting GUI"
    hdriver &
else
    echo "GUI already running ($HD)"
fi

sleep 2

# move server into offline state (starting NGC software in process)
sleep 2
do_wamp_call hipercam.ngc.rpc.ngc_server.offline
sleep 1

# load default setup and switch to standby mode
do_wamp_call hipercam.ngc.rpc.ngc_server.standby
