#!/bin/sh

ARG1=$1

mmcli_status=$(mmcli -L 2>&1 | grep -Eiq "no modems were found|fibocom" && echo 0 || echo 1)

if [ "$mmcli_status" -eq 1 ]; then
	STATUS=$(mmcli -m any --3gpp-ussd-status -J 2>/dev/null | jsonfilter -e '@.modem["3gpp"].ussd.status' 2>/dev/null)

	init_req() {
		OUTPUT=$(mmcli -m any --3gpp-ussd-initiate="$ARG1" 2>&1)
		if echo "$OUTPUT" | grep -q "^error:"; then
			echo "Error: $(echo "$OUTPUT" | sed -n "s/.*: \(.*\)'$/\1/p")"
		else
			echo "$OUTPUT" | awk -v RS="'" 'NR==2'
		fi
	}

	if [ "$ARG1" = "*#06#" ]; then
		mm=$(mmcli -L | awk '{print $1}' | awk -F [/] '{print $NF}')
		mm_modem_json=$(mmcli -m $mm -J)
		IMEI=$(jsonfilter -s "$mm_modem_json" -e "$['modem']['3gpp']['imei']")
		echo "IMEI: $IMEI"
		exit 0
	fi

	case "$STATUS" in
		idle)                                             
			init_req
			;;
		user-response)
			mmcli -m any --3gpp-ussd-respond=$ARG1 | awk -v RS="'" 'NR==2'
			;;
		active)
			mmcli -m any --3gpp-ussd-cancel >/dev/null 2>&1
			init_req
			;;
		*)
			mmcli -m any --3gpp-ussd-cancel >/dev/null 2>&1
			;;
	esac
else
	PORT=$(uci get modeminfo.@modeminfo[0].device)
	[ -e "$PORT" ] || exit 0
	sms_tool -d "$PORT" -R ussd "$ARG1"
fi