#!/bin/sh

/usr/bin/logger -t edgelink_module "$0 $@"

MODNAME=EdgeLink
MODEXEC=AdvProgramMgr
EDGELINK_PATH=/opt/edgelink
PROJ_PATH=/var/data/.edgelink
MODULE_CHAIN=mod_$MODNAME

add_chain() {
  /sbin/iptables -N $MODULE_CHAIN || return
  /sbin/iptables -A $MODULE_CHAIN -p tcp --dport 6001 -j ACCEPT
  /sbin/iptables -A $MODULE_CHAIN -p udp --dport 6513 -j ACCEPT
  /sbin/iptables -A in_mod -j $MODULE_CHAIN
}

del_chain() {
  /sbin/iptables -D in_mod -j $MODULE_CHAIN >/dev/null
  /sbin/iptables -F $MODULE_CHAIN >/dev/null
  /sbin/iptables -X $MODULE_CHAIN >/dev/null
}

create_web_dir_with_link() {
	local binary_path="$1"
	local target_dir="$2"

	if [ ! -d "$target_dir" ]; then
		mkdir -p "$target_dir"
	fi

	local link_path="$target_dir/index.cgi"
	if [ ! -h "$link_path" ]; then
		ln -s "$binary_path" "$link_path"
	fi
}

#Load up node red when called
case "$1" in

start)
	if [ ! -d "$PROJ_PATH" ]; then
		mkdir -p "$PROJ_PATH"
		if [ -d "$EDGELINK_PATH/.project" ]; then
			cp -rf $EDGELINK_PATH/.project/* $PROJ_PATH/
			rm -rf $EDGELINK_PATH/.project
		fi
	fi

	if [ ! -h "$EDGELINK_PATH/project" ]; then
		rm -rf $EDGELINK_PATH/project
		ln -s $PROJ_PATH $EDGELINK_PATH/project
	fi

	if [ ! -d "$PROJ_PATH/uploads" ]; then
		mkdir -p "$PROJ_PATH/uploads"
	fi

	if [ ! -d "$EDGELINK_PATH/www/sys" ]; then
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/sys/websettings"
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/sys/elic_info"
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/sys/file/export"
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/sys/file/import"
	fi

	if [ ! -d "$EDGELINK_PATH/www/data" ]; then
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/data/tags"
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/data/daq"
		create_web_dir_with_link "$EDGELINK_PATH/bin/WebService_bbsmartworx" "$EDGELINK_PATH/www/data/device_info/slot_0/Tz"
	fi

	if [ "$(pidof $MODEXEC)" ]
	then
		echo "$MODNAME already running."
	else
		echo "Starting $MODNAME.."
		ln -s /dev/ttyS0 /dev/ttyAP0 > /dev/null 2>&1
		ln -s /dev/ttyS1 /dev/ttyAP1 > /dev/null 2>&1
		ln -s /dev/ttyS2 /dev/ttyAP2 > /dev/null 2>&1
		ln -s /dev/ttyS3 /dev/ttyAP3 > /dev/null 2>&1
		ln -s /dev/ttyS4 /dev/ttyAP4 > /dev/null 2>&1
		ln -s /dev/ttyS5 /dev/ttyAP5 > /dev/null 2>&1
		ln -s /dev/ttyS6 /dev/ttyAP6 > /dev/null 2>&1
		ln -s /dev/ttyS7 /dev/ttyAP7 > /dev/null 2>&1
		ln -s /dev/ttyS8 /dev/ttyAP8 > /dev/null 2>&1
		/opt/edgelink/bin/$MODEXEC -d
		echo "Logging to /var/log/messages"
	fi
	add_chain
;;

stop)
	echo "Stopping $MODNAME.."
	if [ "$(pidof $MODEXEC)" ]
	then
		/opt/edgelink/bin/$MODEXEC stop
		sleep 3
		killall -9 $MODEXEC
	else
		echo "$MODNAME not running."
	fi
	del_chain
;;

restart)
		echo "Restarting $MODNAME.."
		$0 stop
		sleep 2
		$0 start
		echo "Restarted."
;;
*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
esac
