#!/bin/sh

. /lib/functions.sh
. /lib/netifd/netifd-proto.sh
. /usr/share/libubox/jshn.sh

local usb

#get ctl_device
device=$(uci get simd.@simd[0].device)
ctl_device=$(uci_get_state network wan ctl_device) && {
	[ "$ctl_device" != "$device" ] && [ -e "$ctl_device" ] && {
		device=$ctl_device
		logger "simd set device $device"
		uci set simd.@simd[0].device=$device
		uci commit simd
	}
}

# check if ctl device exist
[ -e "$device" ] || {
    logger "$device does not exist"
    for a in `ls /sys/bus/usb/devices`; do
        local vendor product
        [ -z "$usb" -a -f /sys/bus/usb/devices/$a/idVendor -a -f /sys/bus/usb/devices/$a/idProduct ] || continue
        vendor=$(cat /sys/bus/usb/devices/$a/idVendor)
        product=$(cat /sys/bus/usb/devices/$a/idProduct)
        [ -f /lib/network/wwan/$vendor:$product ] && {
                usb=/lib/network/wwan/$vendor:$product
                devicename=$a
                json_init
                json_load "$(cat $usb)"
                json_select
                json_get_vars desc control data
                [ -e "/dev/ttyUSB$control" ] && {
                        logger "/dev/ttyUSB$control exist?!"
                        next_dev=/dev/ttyUSB$control
                        logger "next dev $next_dev"
                } || {
                        devs=$(ls /dev/ttyUSB*)
                        n=$((control+1))
                        next_dev=$(echo $devs | cut -f $n -d ' ')
                        logger "next dev $next_dev"
                }
        }
    done

    [ -e "$next_device" ] && {
    device=$next_device
    logger "simd set device $device"
    uci set simd.@simd[0].device=$device
    uci commit simd
    }
}

case "$1" in
	list)
		echo '{ "update": { }, "info": { } }'
	;;
	call)
		case "$2" in
			update)
				device=$(uci get simd.@simd[0].device)
				#get icci&imsi
				iccid=$(gcom -d "$device" -s /etc/gcom/geticcid.gcom) || {
				uci set simd.@simd[0].iccid=""
				#uci set simd.@simd[0].imsi=""
				}
				imsi=$(gcom -d "$device" -s /etc/gcom/getimsi.gcom) || {
				#uci set simd.@simd[0].iccid=""
				uci set simd.@simd[0].imsi=""
				}
				logger "simd update iccid $iccid imsi $imsi"
				# return json object or an array
				echo "{ \"iccid\" :\"$iccid\", \"imsi\" :\"$imsi\" }"

				#save data on uci file
				uci set simd.@simd[0].iccid=$iccid
				uci set simd.@simd[0].imsi=$imsi
				uci commit
			;;
			info)
				# return json object or an array
				iccid=$(uci get simd.@simd[0].iccid)
				imsi=$(uci get simd.@simd[0].imsi)
				echo "{ \"iccid\" :\"$iccid\", \"imsi\" :\"$imsi\" }"
			;;
		esac
	;;
esac

