#! /bin/sh

LXDINTERFACE="lxdbr0"
find_ip_of() {
	local netif="$1"
	ip -4 addr show "$netif" | grep -Po 'inet \K[\d.]+'
}

die() {
	echo >&2 "$@"
	exit 1
}

usage() {
	[ "$#" -eq 0 ] || echo >&2 "$@"
	echo >&2 "Usage: $0 {show|create|destroy|setip} [parameter...]"
	exit 1
}

kamailio_db_exists() {
	mysqladmin ping || die "E: mysqld isn't running"
	mysql kamailio -e 'show tables;' >/dev/null 2>&1
}

kamailio_db_engine() {
	sed -i -e '/^DBENGINE/d' "$cfgfile"
	if [ "$1" != "" ]; then
		echo "DBENGINE=$1" >> "$cfgfile"
	fi
}

kamailio_db_charset() {
	sed -i -e '/^CHARSET/d' "$cfgfile"
	if [ "$1" != "" ]; then
		echo "CHARSET=$1" >> "$cfgfile"
	fi
}

kamailio_db_ctl() {
	mysql_script="/usr/lib/x86_64-linux-gnu/kamailio//kamctl/kamdbctl.mysql"
	[ -f "$mysql_script" ] || die "E: Missing '$mysql_script' (install 'kamailio-mysql-modules' package)"
	kamdbctl "$@"
}

cfgfile='/etc/kamailio/kamctlrc'
kamailio_int_inf_conf='/etc/cpbxmt/sip-proxy/conf.d/internal-inf.cfg'

[ "$#" -ge 1 ] || usage "E: Missing action paramter"
action="$1"
shift

case "$action" in
show)
	if kamailio_db_exists; then
		echo "Database kamailio exists"
	else
		die "E: No kamailio database"
	fi
	;;
show-all)
	echo "I: Kamailio 'domain_attrs':"
	mysql kamailio -e "select * from domain_attrs;"
	echo "I: Kamailio 'domain':"
	mysql kamailio -e "select * from domain;"
	echo "I: Kamailio 'dispatcher':"
	mysql kamailio -e "select * from dispatcher;"
	;;
create)
	kamailio_db_engine "MYSQL"
	kamailio_db_charset "latin1"
	kamailio_db_exists && die "E: kamailio database already exists"
	export INSTALL_EXTRA_TABLES='y'
	export INSTALL_PRESENCE_TABLES='y'
	export INSTALL_DBUID_TABLES='y'
	export DBROOTPWSKIP='y'
	kamailio_db_ctl create
	;;
destroy)
	kamailio_db_engine "MYSQL"
	kamailio_db_exists || die "E: kamailio database already removed"
	export DBROOTPWSKIP='y'
	kamailio_db_ctl drop
	kamailio_db_engine ""
	;;
setip)
	ip -4 address show "$LXDINTERFACE" >/dev/null || die "E: Wrong network interface '$LXDINTERFACE'"
	bridge_ip="$(find_ip_of $LXDINTERFACE)"
	[ -n "$bridge_ip" ] || die "E: Cannot find IP of '$LXDINTERFACE'"
	cat <<- EOF >  $kamailio_int_inf_conf
	#!define INTERNAL_INF4 ${bridge_ip}
	#!subst "/<INTERNAL_INF4>/${bridge_ip}/"
	EOF
	;;
*)
	usage "E: Unknown action '$action'"
	;;
esac
