#!/bin/sh

. /etc/init.d/functions.sh
. /etc/conf.d/ptz

USER=ptzadm
LOG="logger -t ${0##*/}[$$]"
LOG_W="$LOG -p user.warning"
LOG_E="$LOG -p user.err"


log_warning() {
	$LOG_W -s "$*"
	warning "$*"
}

log_error() {
	$LOG_E -s "$*"
	error "$*"
}

PORT_MANAGER_PATH=/usr/bin/ptzportmanagerd

start_port_manager() {
	[ $# = 1 ] ||
		end 1 "$0: wrong number of arguments"

	local port_manager_cmd="$PORT_MANAGER_PATH -i $1"

	if check_cmd $port_manager_cmd; then
		end 1 "The designated port manager is already running"
	else
		eval $port_manager_cmd &

		eval respawn_on $port_manager_cmd ||
			end $? "Failed to start port manager"
	fi
}

stop_port_manager() {
	[ $# = 1 ] ||
		end 1 "$0: wrong number of arguments"

	local port_manager_cmd= port_manager_pid= pid_file=

	port_manager_cmd="$PORT_MANAGER_PATH -i $1"
	pid_file=/var/run/ptz/ptzportmanagerd.$1

	[ -f $pid_file ] || return 0

	read port_manager_pid < $pid_file ||
		end $? "Failed to read pid file"

	tr '\0' ' ' < /proc/$port_manager_pid/cmdline | grep -q "$port_manager_cmd" ||
		end $? "Command lines don't match"

	eval respawn_off $port_manager_cmd ||
		end $? "Failed to turn off respawnd"

	kill $port_manager_pid ||
		end 0 "Failed to terminate ptz_port_manager[$port_manager_pid]"
	rm -f $pid_file
}
set_error_msg() {
	local err="Not enough power for both camera and pantilt motors"

	# set poe error text override
	dbus-send --print-reply --system			\
		--dest=com.axis.Streamer.Video		\
		/com/axis/Streamer/Video/1		\
		org.freedesktop.DBus.Properties.Set	\
		string:com.axis.Streamer.Video		\
		string:TextOverride			\
		variant:string:"$err"			\
		> /dev/null
}

setup_persistent() {
	local persistent_dir=/lib/persistent
	local persistent_file_dir=$persistent_dir/var/lib/ptz
	local persistent_file=ptz_counter

	[ -d $persistent_file_dir ] || {
		mkdir -p $persistent_file_dir || {
			$LOG_E -s "create $persistent_file_dir failed"
			return 1
		}
		chown $USER:$USER $persistent_file_dir || {
			$LOG_E -s "chown $persistent_file_dir failed"
			return 1
		}
	}

	[ -w $persistent_file_dir/$persistent_file ] || {
		umask 117
		echo 0 > $persistent_file_dir/$persistent_file || {
			$LOG_E -s "write to $persistent_file failed"
			return 1
		}
		chown $USER:$USER $persistent_file_dir/$persistent_file || {
			$LOG_E -s "chown $persistent_file failed"
			return 1
		}
	}
}

start_ptz() {
	local psef=/var/run/poe/pse_type pse_type=

	begin "Starting ptz coordinator"
	start_daemon /usr/bin/ptzaurus
	end $?

	begin "Starting ptz vapix parser"
	start_daemon /usr/bin/ptzvapixd
	end $?
}

stop_ptz() {

	begin "Stopping ptz coordinator"
	stop_daemon /usr/bin/ptzaurus
	end $?
	begin "Stopping ptz vapix parser"
	stop_daemon /usr/bin/ptzvapixd
	end $?
}

case "$1" in
	start)
		start_ptz
		;;
	stop)
		stop_ptz
		;;
	restart)
		stop_ptz && start_ptz
		;;
	*)
		error "Usage: $0 start|stop|restart"
		;;
esac
