#!/bin/sh /etc/rc.common

# SIM slot switcher for HuastLink HC-G60 or ZBT-WE2806-A
# by Konstantine Shevlakov at <shevlakov@132lan.ru> 2025

START=99
STOP=10
USE_PROCD=1

load_config_gpio(){
	local gpio value
	for c in gpio value; do
		config_get $1_$c "$1" $c
		export $1_$c
	done
}

load_config_failover(){
	local enable mode interval times_rsrp times_ping revert rsrp host
	for c in enable mode interval times_rsrp times_ping revert rsrp host; do
		config_get $1_$c "$1" $c
		export $1_$c 
	done
}

reload_iface(){
	[ "$iface" ] &&  {
		for i in $iface; do
			ifup $i
		done
	}
}

start_service(){
	config_load ssw
	config_foreach load_config_gpio modem
	config_foreach load_config_gpio sim
	modem_cur=$(cat /sys/class/gpio/$modem_gpio/value)
	sim_cur=$(cat /sys/class/gpio/$sim_gpio/value)
	iface=$(uci show network | awk -F [.] '/devices/{gsub("'\''","");print $2}' | tail -1)
	if [ "$modem_value" = "$modem_cur" -a "$sim_value" = "$sim_cur" ]; then
		continue
	elif [ "$modem_value" = "$modem_cur" -a "$modem_value" = "1" ]; then
		logger -t "SIM SW" "modem already enabled on gpio $modem_gpio. Restart it"
		echo "0" > /sys/class/gpio/$modem_gpio/value
		sleep 2
		echo "$sim_value" > /sys/class/gpio/$sim_gpio/value
		echo "$modem_value" > /sys/class/gpio/$modem_gpio/value
		if [ -x /etc/init.d/smstools3 ]; then
			/etc/init.d/smstools3 restart
		fi
		sleep 30 && reload_iface &
	else
		logger -t "SIM SW" "modem powered changed"
		echo "$sim_value" > /sys/class/gpio/$sim_gpio/value
		echo "$modem_value" > /sys/class/gpio/$modem_gpio/value
		if [ -x /etc/init.d/smstools3 ]; then
			/etc/init.d/smstools3 restart
		fi
		sleep 30 && reload_iface &
	fi
	#config_foreach load_config_failover failover
	procd_open_instance
	procd_set_param command /usr/share/ssw_track.sh
	procd_close_instance
}

reload_service(){
        start
}

service_triggers(){
	procd_add_reload_trigger "ssw"
}
