#!/bin/sh
. /usr/share/libubox/jshn.sh

trap 'cleanup >/dev/null 2>&1; exit 0' INT TERM
SECTIONS=$(echo $(uci show modeminfo | awk -F [\]\[\@=] '/=modeminfo/{print $3}'))
DECIMAL=$(uci -q get modeminfo.@general[0].decimal)
DECIMAL=${DECIMAL:-0}

get_vars(){
	for v in device device_qmi qmi_proxy qmi_mode;  do
		eval $v=$(uci -q get modeminfo.@modeminfo[${s}].${v} 2>/dev/null)
	done
}


cleanup(){
	CURRENT_PID=$$
	ps ww | grep "/bin/sh.*modeminfo" | grep -v grep | awk '{print $1}' | grep -v "^$CURRENT_PID\$" | xargs -r kill -9 >/dev/null 2>&1
	ps ww | grep "atinout" | grep -v grep | awk '{print $1}' | xargs -r kill -9 >/dev/null 2>&1
}




function if_null() {
	for var in DEVICE COPS PLMN MODE CSQ_PER LAC CSQ_RSSI SINR RSRP \
		RSRQ IMEI REGST EARFCN CHIPTEMP FW BWDL ICCID IMSI NUMBER; do
		if [ "x$(eval echo \${$var})" = "x" ]; then
				eval $var='--'
		fi
	done
}


resolve_cops_name() {
	COPS=$(echo "$COPS" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
	if echo "$COPS" | grep -qE '^[0-9]{3} [0-9]{2}$'; then
		MCC=$(echo "$COPS" | awk '{print $1}')
		MNC=$(echo "$COPS" | awk '{print $2}')
		MCCMNC="${MCC}${MNC}"
		OPNAME=$(grep "^${MCCMNC};" /usr/share/modeminfo/mccmnc.dat | cut -d';' -f2)
		if [ -n "$OPNAME" ]; then
			COPS="$OPNAME"
		fi
	fi
}


qmi_device(){
	if [ $qmi_mode ]; then
		SCRIPT=/usr/share/modeminfo/scripts/modeminfo-qmi
	else
		SCRIPT=/usr/share/modeminfo/scripts/modeminfo
	fi

	if [ -r $SCRIPT ]; then
		. $SCRIPT
	else
		exit 0
	fi
}


args(){
	echo "$#"
}

json_init
json_add_array "modem"

m=0
for s in $SECTIONS; do
	m=$((m + 1))
	if [ "$s" ]; then
		get_vars
		qmi_device
		get_device_info
		get_data_in >/dev/null 2>&1
		if_null
		resolve_cops_name

		json_add_object ""
		json_add_string "device" "$(echo "$DEVICE" | sed 's/\r//g' | sed 's/^ //g' | sed 's/  / /g')"
		json_add_string "cops" "$COPS"
		json_add_string "plmn" "$PLMN"
		json_add_string "dec" "$DECIMAL"
		json_add_string "mode" "$MODE"
		json_add_string "csq_per" "$CSQ_PER"
		json_add_string "lac" "$LAC"
		json_add_string "cid" "$CID"
		json_add_string "rssi" "$CSQ_RSSI"
		json_add_string "sinr" "$SINR"
		json_add_string "rsrp" "$RSRP"
		json_add_string "rsrq" "$(echo "$RSRQ" | sed 's/[[:space:]\r]//g')"
		json_add_string "imei" "$(echo "$IMEI" | sed 's/[[:space:]\r]//g')"
		json_add_string "reg" "$(echo "$REGST" | sed 's/[[:space:]\r]//g')"
		json_add_string "csq_col" "$CSQ_COL"
		json_add_string "arfcn" "$EARFCN"
		json_add_string "rawband" "$RAWBAND"
		json_add_string "chiptemp" "$CHIPTEMP"
		json_add_string "firmware" "$FW"
		json_add_string "bwdl" "$BWDL"
		json_add_string "lteca" "$LTE_CA"
		json_add_string "enbid" "$ENBID"
		json_add_string "distance" "$DISTANCE"
		json_add_string "ta" "$TA"
		json_add_string "cell" "$CELL"
		json_add_string "scc" "$SCC"
		json_add_string "bwca" "$BWCA"
		json_add_string "pcc_str" "$PCC_STR"
		json_add_string "scc_str" "$SCC_STR"
		json_add_string "iccid" "$(echo "$ICCID" | sed 's/[ Ff]//g')"
		json_add_string "imsi" "$(echo "$IMSI" | sed 's/[[:space:]\r]//g')"
		json_add_string "pci" "$PCI"
		json_add_string "number" "$NUMBER"
		json_add_string "ant0power" "$ANT0POWER"
		json_add_string "ant0ecio" "$ANT0ECIO"
		json_add_string "ant0rsrp" "$ANT0RSRP"
		json_add_string "ant1power" "$ANT1POWER"
		json_add_string "ant1ecio" "$ANT1ECIO"
		json_add_string "ant1rsrp" "$ANT1RSRP"
		json_add_string "ant2power" "$ANT2POWER"
		json_add_string "ant2ecio" "$ANT2ECIO"
		json_add_string "ant2rsrp" "$ANT2RSRP"
		json_add_string "ant3power" "$ANT3POWER"
		json_add_string "ant3ecio" "$ANT3ECIO"
		json_add_string "ant3rsrp" "$ANT3RSRP"
		json_add_string "ant4power" "$ANT4POWER"
		json_add_string "ant4ecio" "$ANT4ECIO"
		json_add_string "ant4rsrp" "$ANT4RSRP"
		json_add_string "ant5power" "$ANT5POWER"
		json_add_string "ant5ecio" "$ANT5ECIO"
		json_add_string "ant5rsrp" "$ANT5RSRP"
		json_add_string "ant6power" "$ANT6POWER"
		json_add_string "ant6ecio" "$ANT6ECIO"
		json_add_string "ant6rsrp" "$ANT6RSRP"
		json_add_string "ant7power" "$ANT7POWER"
		json_add_string "ant7ecio" "$ANT7ECIO"
		json_add_string "ant7rsrp" "$ANT7RSRP"
		json_close_object
	fi
	# flush modem variables
	unset BWCA SCC SC BWDx BWPx BWCx BWDL LTE_CA \
		DEVICE COPS PLMN MODE CSQ_PER LAC CSQ_RSSI \
		SINR RSRP IMEI REGST EARFCN CHIPTEMP FW \
		ICCID IMSI RSRQ NUMBER PCC_STR SCC_STR
done

json_close_array
json_dump

DELAY=$(uci get modeminfo.@general[0].delay >/dev/null 2>&1)

PIDS=$(pgrep sms-tool)
[ -n "$PIDS" ] && kill -9 $PIDS >/dev/null 2>&1
[ "$DELAY" ] || DELAY=0
sleep $DELAY

exit 0
