#!/bin/sh

# setup_ombutel: Enable the Twinstar module in Ombutel. Does nothing
# if module is already enabled.

set -e

curl="curl -s"
base_url="http://localhost/api"
token=''
module_name="twinstar_status"
menu_name="menu.$module_name"
version=1.0 # FIXME: get version
maint_key=`cat /etc/ombutel/ombutel-maint.conf`
icon_menu="glyphicon glyphicon-retweet"
icon=""

log() {
	echo >&2 "$0: $*"
}

get_key() {
	_key_name=$1
	tr '{},' '\n\n\n' | tr -d '"' | awk -F: "/^$_key_name\>/{print \$2}"
}

check_success() {
	_output=$1
	_msg=$2

	if ! echo "$_output" | grep -q '"status":"success"'; then
		if echo "$_output" | grep -q '"status":"error"'; then
			_error=`echo $_output | get_key message`
		else
			_error=$_output
		fi
		log "$_msg: $_error. Aborting."
		exit 1
	fi
}

query_filter() {
	_target=$1
	_key_name=$2
	_query=$3
	_error=$4

	_output=`$curl --data "$_query" "$base_url/$_target"`
	check_success "$_output" "$_error"
	echo "$_output" | get_key "$_key_name"
}

api_get() {
	_target=$1
	_error=$2

	_output=`$curl --data "token=$token" "$base_url/$_target"`
	check_success "$_output" "$_error"
	echo "$_output"
}

# Returns ID of a menu, creating it if needed:
get_menu() {
	_label=$1
	_parent_id=$2
	_module_id=$3
	_icon=$4

	_menus_text=`api_get menus "Failed getting list of menus"`
	_menus=`echo "$_menus_text" | sed -e 's/^.*"data":\[{//' -e 's/}\]}$//' -e 's/},{/\n/g'`
	_menu_id=`echo "$_menus" | awk -F '[":,]+' '$5 == "'"$_label"'" {print $3}' | head -n1`
	if [ "$_menu_id" != '' ]; then
		echo "$_menu_id"
		return
	fi

	_sort=`echo "$_menus" | awk -F '[":,]+' 'BEGIN {n=0} $7 == "'"$_parent_id"'" {if ($(19) > n) {n=$(19)}} END {print n}'`
	if [ -z "$_sort" ] || [ "$_sort" = "null" ]; then
		_sort=0
	fi
	_sort=$((_sort + 1))
	log "Creating menu $_label."
	_menu_id=`query_filter create_menu menu_id \
		"token=$token&label=$_label&parent_id=$_parent_id&module_id=$_module_id&icon=$_icon&sort=$_sort" \
		"Failed to create menu"`
	echo "$_menu_id"
}


token=`query_filter authenticate token "key=$maint_key" \
	"Failed getting auth token" `

mod_list_text=`api_get modules "Failed getting list of modules"`
modules=`echo "$mod_list_text" | sed -e 's/^.*"data":\[{//' -e 's/}\]}$//' -e 's/},{/\n/g'`
module_id=`echo "$modules" | awk -F '[":,]+' "\\$5 == \"$module_name\" {print \\$3}"`
if [ "$module_id" = '' ]; then
	echo "$0: Creating module $module_name:"
	module_id=`query_filter create_module module_id \
		"token=$token&name=$module_name&has_dialplan=no&admin=yes&portal=no&version=$version" \
		"Failed to create module"`
fi

main_menu_id=`get_menu menu.admin "" "" ""`
twinstar_menu_id=`get_menu menu.twinstar "$main_menu_id" "" "$icon_menu"`
menu_id=`get_menu "$menu_name" "$twinstar_menu_id" "$module_id" "$icon"`

log "Done"
