#!/bin/sh

Delay=
TEXT=1
force=
count=0

[ -e /usr/bin/killall ] && [ -e /usr/bin/ledman ] && {
	ledman --boot >/dev/null 2>&1 &
}

while getopts "wsipgebcmvojraCd:nfl" opt; do

	case $opt in
		w) TEXT="Request from Web UI"
			;;
		s) TEXT="Request from SMS"
			;;
		i) TEXT="Request from Input/Output"
			;;
		p) TEXT="Request from ping reboot"
			;;
		g) TEXT="Request from wget reboot"
			;;
		e) TEXT="Request from reboot scheduler"
			;;
		b) TEXT="Request from button"
			;;
		c) TEXT="Request after backup"
			;;
		m) TEXT="Request after modem firmware upgrade"
			;;
		v) TEXT="Request after firmware upgrade"
			;;
		o) TEXT="Request from modbus"
			;;
		j) TEXT="Request from iojuggler"
			;;
		r) TEXT="Request from gsm due to GPRS Attach Mode change"
			;;
		a) TEXT="Request from call"
			;;
		C) TEXT="Request from Cumulocity/Cloud Of Things"
			;;
		l) TEXT="Request from mctl"
			;;
		d) Delay="$2"
			;;
		n) notsync=1
			;;
		f) force=1
			;;
		#*) checkname=1;;
		\?) reboot=0 >&2 ;;
	esac
done
if [ "$force" ]; then
	/bin/busybox reboot -f
fi
if [ "$reboot" != "0" ]; then
	if [ "$TEXT" = "1" ]; then
		parentPPID=`cat /proc/"$PPID"/status 2>/dev/null | grep "PPid:" | awk -F' ' '{print $2}'`
		parentName=`cat /proc/"$parentPPID"/status 2>/dev/null | grep "Name:" | awk -F' ' '{print $2}'`
		case "$parentName" in
			"dropbear")
				TEXT="Request from SSH"
			;;
			"procd")
				TEXT="Request from UART"
			;;
			*)
				TEXT="Other"
			;;
		esac
	fi

	ubus call log write_ext "{
		\"event\": \"$TEXT\",
		\"sender\": \"Reboot\",
		\"table\": 1,
		\"write_db\": 1,
	}"

	ubus call ip_block rebooted 2> /dev/null

	sleep 1;

	[ -e "/var/lock/opkg.lock" ] && {
		count=0
		echo "opkg.lock exists, will be waiting for up to 60sec for opkg to finish"
		while [ -e "/var/lock/opkg.lock" -a "$count" -le 60 ]; do
			sleep 1
			count=$((count +1))
		done
	}

	touch /log/reboot
	if [ "$notsync" = "1" ] || [ $Delay ]; then
		var="-"
		if [ "$notsync" = "1" ]; then
			var="$var""n"
		fi
		if [ $Delay ]; then
			var="$var""d$Delay"
		fi
	else
		var=""
	fi

	/bin/busybox reboot "$var"
fi
