#!/bin/sh /etc/rc.common
START=83
STOP=01
USE_PROCD=1

# Add $2 to value of symbol $1 as csv 
csv_add() {
 local SEP=""
 local VAL=$(d2 -s "${1}")
 for item in ${VAL//,/ }; do
    [ "${item}" = "${2}" ] && return 0
    SEP="," 
 done
 d2 -c "${1}" "${VAL}${SEP}${2}"
}

upgrade_cfg() {

    XAGENT_ID=$(d2 -s xagentcfg[0].x_agent_id)
    if [ "${XAGENT_ID}empty" == "empty" ]; then

        d2 -c xagentcfg[0].x_agent_id         "$(nvram get x_agent_id)"
        d2 -c xagentcfg[0].x_agent_claim_code "$(nvram get x_agent_claim_code)"
        d2 -c xagentcfg[0].x_agent_registered "$(nvram get x_agent_registered)"
        d2 -c xagentcfg[0].x_agent_claimed    "$(nvram get x_agent_claimed)"

        nvram unset x_agent_id
        nvram unset x_agent_claim_code
        nvram unset x_agent_registered
        nvram unset x_agent_claimed
        nvram commit
    fi
}

start_service() {
	local factory_mode=`envctl factory get factory_mode`
	if [ "$factory_mode" == "off" ]; then
		#Set x_force_connection, So xAgent can reach xCloud
		d2 -c xagentcfg[0].x_force_connection 1

		# add status handler, if needed
		csv_add xagentcfg[0].x_handler_event_sink /usr/bin/evsinkd2

		SN=`d2 -s general.FSN`
		MODEL=`d2 -s general.DeviceModel`
		#/opt/xagent/xagent --log_debug --log_file /tmp/xagent -w -d --ca_file /opt/xagent/certs/ca-bundle-mega.crt \
		#        --connectivity_log_file /tmp/xagent_connection_events.log --hardware_id ${SN} --model_id ${MODEL} --agent_keepalive 20,3,20
		
		pid=`pgrep -f xcenvsw.sh | sed -n 1p`
		if [ -z "$pid" ]; then
			cd /etc/xagent; /bin/sh ./xcenvsw.sh &
		fi
		echo "Start xagent."
	fi
}

stop_service() {
    echo "Stop xagent."
    killall xagent
    d2 -c xagentcfg.x_agent_connected 0
    d2 -c xagentcfg.x_agent_pid 0
}

boot() {
    [ "`cat /tmp/orbi_type`" = "Satellite" ] && return
    upgrade_cfg
    start_service
}

restart() {
    stop_service
    start_service
}
