#!/bin/sh

INTERFACE="default"
CFG_FILE="/data/moca.conf.${INTERFACE}"
# mocacfg mocap and mocad must be installed in the same directory
INSTALL_DIR_PREFIX=${0%/*}
MOCACTL=$INSTALL_DIR_PREFIX"/mocap"
MOCAP=$INSTALL_DIR_PREFIX"/mocap"
MOCAD=$INSTALL_DIR_PREFIX"/mocad"

function parse_opts()
{
	PARSING_INIT=1
	PARSING_CFG=0
	PARSING_TRACE=0

	INIT_TIME=""
	ANY_TIME=""
	TRACE=""

	while [ ! -z "$1" ]; do
		case "$1" in
			-c)
				PARSING_CFG=1
				PARSING_INIT=0
				PARSING_TRACE=0
				;;
			-t)
				PARSING_TRACE=1
				PARSING_CFG=0
				PARSING_INIT=0
				;;
			-i)
				PARSING_TRACE=0
				PARSING_CFG=0
				PARSING_INIT=1
				;;
			*)
				if [ $PARSING_CFG -eq 1 ]; then
					ANY_TIME="${ANY_TIME}$1 "
				elif [ $PARSING_INIT -eq 1 ]; then
					INIT_TIME="${INIT_TIME}$1 "
				elif [ $PARSING_TRACE -eq 1 ]; then
					TRACE="${TRACE}$1 "
				fi
				;;
		esac
		shift
	done
	echo "INIT_TIME=\"${INIT_TIME% }\"" > $CFG_FILE
	echo "ANY_TIME=\"${ANY_TIME% }\"" >> $CFG_FILE
	echo "TRACE=\"${TRACE% }\"" >> $CFG_FILE
	sync
}

#
# MAIN
#

INIT_TIME=""
ANY_TIME=""
TRACE=""
if [ -e $CFG_FILE ]; then
	INIT_TIME=`grep INIT_TIME= $CFG_FILE`
	ANY_TIME=`grep ANY_TIME= $CFG_FILE`
	TRACE=`grep TRACE= $CFG_FILE`
	INIT_TIME=${INIT_TIME:11:-1}
	INIT_TIME=${INIT_TIME//[^a-zA-Z0-9_=,\. +-]}
	ANY_TIME=${ANY_TIME:10:-1}
	ANY_TIME=${ANY_TIME//[^a-zA-Z0-9_=,\. +-]}
	TRACE=${TRACE:7:-1}
	TRACE=${TRACE//[^a-zA-Z0-9_=,\. +-]}
fi

cmd="$1"
shift

if [[ ! -e $MOCACTL && ! -e $MOCAP ]]; then
	echo "$0: MoCA utilities are not installed"
	exit 1
fi

case "$cmd" in
	set)
		parse_opts "$@"
		exit 0
		;;

	show)
		echo "INIT_TIME: $INIT_TIME"
		echo "ANY_TIME: $ANY_TIME"
		echo "TRACE: $TRACE"
		exit 0
		;;

	boot)
		echo "Starting mocad"
		$MOCAD -wD -l /data -p /var/run/mocad.pid -f /etc/moca/moca20core.bin -i moca0
		if [ -e $MOCAP ]; then
			$MOCAP set --restore_defaults
			$MOCAP set $INIT_TIME $TRACE $ANY_TIME
			exec $MOCAP set --start
		elif [ -e $MOCACTL ]; then
			$MOCACTL restore_defaults
			$MOCACTL trace $TRACE
			$MOCACTL config $ANY_TIME
			exec $MOCACTL start $INIT_TIME
		fi

		exit 1
		;;

	kill)
		killall mocad >& /dev/null
		sleep 1
		exit 0
		;;

	start)
		if [ -e $MOCAP ]; then
			$MOCAP set --restore_defaults
			$MOCAP set $INIT_TIME $TRACE $ANY_TIME
			exec $MOCAP set --start
		elif [ -e $MOCACTL ]; then
			$MOCACTL restore_defaults
			$MOCACTL trace $TRACE
			$MOCACTL config $ANY_TIME
			exec $MOCACTL start $INIT_TIME
		fi

		exit 1
		;;

	restart)
		if [ -e $MOCAP ]; then
			$MOCAP set --stop
			$MOCAP set --restore_defaults
			$MOCAP set $INIT_TIME $TRACE $ANY_TIME
			exec $MOCAP set --start
		elif [ -e $MOCACTL ]; then
			$MOCACTL stop
			$MOCACTL restore_defaults
			$MOCACTL trace $TRACE
			$MOCACTL config $ANY_TIME
			exec $MOCACTL start $INIT_TIME
		fi
		exit 1
		;;

	stop)
		if [ -e $MOCAP ]; then
			exec $MOCAP set --stop
		elif [ -e $MOCACTL ]; then
			exec $MOCACTL stop
		fi
		exit 1
		;;
esac

echo "usage:"
echo "  mocacfg set [<init_options>] [-c <config_options>] [-t <trace_options>]"
echo "  mocacfg show"
echo "  mocacfg { start | restart | stop }"
echo "  mocacfg { boot | kill }"

exit 1
