#!/bin/sh
MODEM_INTF=$1
[ -z "$MODEM_INTF" ] && return
INFO=$2
timeout 1 mmcli -L | while read MODEM; do
	MODEM_ID=$(echo $MODEM |  awk -F' ' '{print $1}' | awk -F/ '{print $6}')
	MODEM_INFO="$(timeout 1 mmcli -m $MODEM_ID --output-keyvalue)"
	if [ -n "$MODEM_INFO" ] && [ "$(echo "$MODEM_INFO" | grep 'modem.generic.device ' | awk -F": " '{print $2}')" = "$MODEM_INTF" ]; then
		PERCENT=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.signal-quality.value ' | awk -F": " '{print $2}')
		OPERATOR=$(echo "$MODEM_INFO" | grep -m 1 'modem.3gpp.operator-name ' | awk -F": " '{print $2}')
		NUMBER=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}')
		STATE=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.state ' | awk -F": " '{print $2}')
		TYPE=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.access-technologies.value\[1\]' | awk -F": " '{print $2}')
		if [ -n "$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.access-technologies.value\[2\]')" ]; then
			TYPE2=$(echo "$MODEM_INFO" | grep -m 1 'modem.generic.access-technologies.value\[2\]' | awk -F": " '{print $2}')
			TYPE="$TYPE, $TYPE2"
		fi
		[ -z "$INFO" ] && echo $PERCENT
		[ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE"

		# Output: RSSI;RSRP;RSRQ;SINR
		if [ "$INFO" = "signal" ]; then
			SIGNAL_INFO="$(timeout 1 mmcli -m $MODEM_ID --signal-get --output-keyvalue 2>/dev/null)"
			RSSI=""
			RSRP=""
			RSRQ=""
			SINR=""
			if [ -n "$SIGNAL_INFO" ]; then
				# Try LTE first
				RSSI=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.lte.rssi ' | awk -F": " '{print $2}')
				RSRP=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.lte.rsrp ' | awk -F": " '{print $2}')
				RSRQ=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.lte.rsrq ' | awk -F": " '{print $2}')
				SINR=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.lte.snr ' | awk -F": " '{print $2}')

				# Try 5G/NR if LTE not available
				[ -z "$RSRP" ] || [ "$RSRP" = "--" ] && RSRP=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.nr5g.rsrp ' | awk -F": " '{print $2}')
				[ -z "$RSRQ" ] || [ "$RSRQ" = "--" ] && RSRQ=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.nr5g.rsrq ' | awk -F": " '{print $2}')
				[ -z "$SINR" ] || [ "$SINR" = "--" ] && SINR=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.nr5g.snr ' | awk -F": " '{print $2}')

				# Fallback to UMTS for RSSI
				[ -z "$RSSI" ] || [ "$RSSI" = "--" ] && RSSI=$(echo "$SIGNAL_INFO" | grep -m 1 'modem.signal.umts.rssi ' | awk -F": " '{print $2}')

				# Clean up "--" markers
				[ "$RSSI" = "--" ] && RSSI=""
				[ "$RSRP" = "--" ] && RSRP=""
				[ "$RSRQ" = "--" ] && RSRQ=""
				[ "$SINR" = "--" ] && SINR=""
			fi
			echo "$RSSI;$RSRP;$RSRQ;$SINR"
		fi

		exit
	fi
done
