#!/bin/bash

if [ -f /etc/default/freeswitch ]; then
		. /etc/default/freeswitch
fi

if [ -f /etc/sysconfig/freeswitch ]; then
	. /etc/sysconfig/freeswitch
fi

RETVAL=1
USER=${FS_USER:-freeswitch}
BIN_FILE=${FS_BIN:-/usr/bin/freeswitch}
PID_FILE=${FS_PID:-/var/run/freeswitch/freeswitch.pid}
CFG_FILE=${FS_CONFIG:-/etc/kazoo/freeswitch}
export HOME=${FS_HOME:-/var/lib/kazoo-freeswitch}

if [ -z "${FREESWITCH_ARGS}" ]; then
	FREESWITCH_ARGS="-nonat -conf ${CFG_FILE} -run /var/run/freeswitch -db /var/lib/kazoo-freeswitch/db -log /var/log/freeswitch -cache /var/lib/kazoo-freeswitch/cache -sounds /usr/share/kazoo-freeswitch/sounds -storage /var/lib/kazoo-freeswitch/storage"
fi

prepare() {
	mkdir -p /var/log/freeswitch
	chown -R ${USER} /var/log/freeswitch
	mkdir -p /var/lib/kazoo-freeswitch/{db,cache,storage}
	chown -R ${USER} /var/lib/kazoo-freeswitch
	mkdir -p /usr/share/kazoo-freeswitch/sounds
	chown -R ${USER} /usr/share/kazoo-freeswitch/sounds
	mkdir -p /var/run/freeswitch
	chown -R ${USER} /var/run/freeswitch
	if [ -e ${PID_FILE} ]; then
		rm -rf ${PID_FILE}
	fi	
        RETVAL=$?
}

start() {
	cd ${HOME}

	if fs_cli -x 'status' > /dev/null 2>&1; then
		echo "FreeSWITCH is already running!"
		return
	fi

	/usr/bin/epmd -daemon

	set -- ${BIN_FILE} ${FREESWITCH_ARGS} ${FREESWITCH_PARAMS} "$@"
	if [ "$(whoami)" == "${USER}" ]; then
		exec "$@"
	else
		runuser -s /bin/bash ${USER} -c "$*"
	fi
	RETVAL=$?

	if [ ${RETVAL} -ne 0 ]; then
		echo "Failed to start FreeSWITCH!"
		RETVAL=1
	fi
}

stop() {
	cd ${HOME}
	${BIN_FILE} -stop > /dev/null 2>&1
	killall freeswitch
	RETVAL=$?
}

status() {
	fs_cli -x 'status' && fs_cli -x 'erlang status'
	RETVAL=$?
}

restart() {
	stop
	start
}

pause() {
	fs_cli -x 'fsctl pause'
}

resume() {
	fs_cli -x 'fsctl resume'
}

case "$1" in
	prepare)
		prepare
		;;
	background)
		shift
		start "-ncwait" $@
		;;
	start)
		shift
		start $@
		;;
	stop)
		stop
		;;
	status)
		status
		;;
	restart)
		restart
		;;
	pause)
		pause
		;;
	resume)
		resume
		;;
	*)
		echo "Usage: freeswitch {prepare|start|background|stop|restart|status|pause|resume}"
		;;
esac

exit ${RETVAL}
