#!/bin/sh
# luci-app-cellular 安装后初始化: 补默认配置、迁移旧配置、启用并启动服务。

R="${CELL_ROOT:-}"
uci -q batch <<-EOT
	delete ucitrack.@cellular[-1]
	add ucitrack cellular
	set ucitrack.@cellular[-1].init=cellular
	commit ucitrack
EOT

[ -f "$R/etc/config/cellular" ] || touch "$R/etc/config/cellular" 2>/dev/null

_fresh=0
if [ -z "$(uci -q get cellular.global.init_ver)" ]; then
	_fresh=1
	[ -d "$R/etc/cellular" ] && _fresh=0
	uci -q show cellular 2>/dev/null | \
		grep -q "^cellular\.[^.=]*=\(dial\|bandcap\|bandlock\|prefmode\|layout\|watchdog\|netopt\|smsrule\|usbmodemap\|qosmem\)$" && _fresh=0
fi

uci -q get cellular.global >/dev/null 2>&1 || {
	uci -q batch <<-EOT
		set cellular.global=global
		set cellular.global.enabled=1
		set cellular.global.poll_interval=8
		set cellular.global.temp_warn=55
		set cellular.global.temp_crit=70
		set cellular.global.at_timeout=1200
		set cellular.global.always_monitor=0
		set cellular.global.monitor_interval=60
		set cellular.global.log_max=300
		set cellular.global.auto_dial=1
		set cellular.global.debug=0
		set cellular.global.sms_enabled=1
		commit cellular
	EOT
}

if [ "$_fresh" = "1" ]; then
	uci -q batch <<-EOT
		set cellular.global.always_monitor=1
		set cellular.watchdog=watchdog
		set cellular.watchdog.enabled=1
		set cellular.watchdog.seeded=1
		set cellular.watchdog.method=dns
		set cellular.watchdog.host=223.5.5.5
		set cellular.watchdog.name=www.qq.com
		set cellular.watchdog.timeout=3
		set cellular.watchdog.interval=60
		set cellular.watchdog.fails=3
		set cellular.watchdog.cooldown=180
		set cellular.watchdog.redial=1
		set cellular.watchdog.cellsw=1
		set cellular.watchdog.reset=0
		set cellular.watchdog.only_up=1
		set cellular.netopt=netopt
		set cellular.netopt.enabled=1
		set cellular.netopt.interval=300
		set cellular.netopt.auto=1
		set cellular.netopt.allow_nv=0
	EOT
	echo "luci-app-cellular: 全新安装, 已默认打开 始终监听 / 网络看门狗 / 网络优选(都可以在界面上关掉)"
fi
uci -q set cellular.global.init_ver='1.5.5'
uci -q commit cellular

uci -q get cellular.global.sms_enabled >/dev/null 2>&1 || {
	uci -q set cellular.global.sms_enabled=1
	uci -q commit cellular
}

mkdir -p "$R/etc/cellular/sms" 2>/dev/null
chmod 0700 "$R/etc/cellular/sms" 2>/dev/null

_t=$(uci -q get cellular.global.at_timeout)
case "$_t" in
	''|*[!0-9]*) ;;
	*) [ "$_t" -lt 1200 ] && { uci -q set cellular.global.at_timeout=1200; uci -q commit cellular; } ;;
esac

for _s in $(uci -q show cellular | sed -n 's/^cellular\.\([^.=]*\)=dial$/\1/p'); do
	_old=$(uci -q get cellular."$_s".ifname)
	[ -n "$_old" ] || continue
	case "$_old" in
		[A-Za-z]*_[0-9]*) continue ;;   # 已经是新格式
	esac
	uci -q delete network."$_old" 2>/dev/null
	uci -q delete network."${_old}6" 2>/dev/null
	_i=0
	while _z=$(uci -q get firewall.@zone[$_i].name); do
		[ -z "$_z" ] && break
		if [ "$_z" = "wan" ]; then
			uci -q del_list firewall.@zone[$_i].network="$_old"
			uci -q del_list firewall.@zone[$_i].network="${_old}6"
		fi
		_i=$((_i+1))
	done
	uci -q delete cellular."$_s".ifname
	echo "luci-app-cellular: 已清理旧拨号接口 $_old, 将按 Base_N 重建"
done
uci -q commit network
uci -q commit firewall
uci -q commit cellular

_ncm="$R/etc/gcom/ncm.json"
if [ -s "$_ncm" ] && grep -q '"huawei"' "$_ncm" && ! grep -q '"tdtech"' "$_ncm"; then
	awk '
		function flush(name,   t) { t = blk; gsub(/"huawei"/, "\"" name "\"", t); printf "%s", t }
		{
			print
			if (!cap && $0 ~ /"huawei"[ \t]*:[ \t]*\{/) { cap = 1; depth = 0; blk = "" }
			if (cap) {
				blk = blk $0 "\n"
				n = split($0, a, ""); for (i = 1; i <= n; i++) { if (a[i] == "{") depth++; else if (a[i] == "}") depth-- }
				if (depth == 0) {
					cap = 0
					if (blk !~ /},[ \t]*\n$/) sub(/}[ \t]*\n$/, "},\n", blk)
					flush("td"); flush("tdtech")
				}
			}
		}' "$_ncm" > "$_ncm.tmp" 2>/dev/null && \
		grep -q '"tdtech"' "$_ncm.tmp" && mv "$_ncm.tmp" "$_ncm"
	rm -f "$_ncm.tmp" 2>/dev/null
fi

chmod +x "$R/usr/sbin/cellulard" "$R/usr/sbin/cellular" "$R/usr/sbin/cellular-atq" "$R/usr/libexec/rpcd/luci.cellular" 2>/dev/null
"$R/etc/init.d/cellular" enable >/dev/null 2>&1
"$R/etc/init.d/cellular" restart >/dev/null 2>&1
rm -f "$R/tmp/luci-indexcache" "$R"/tmp/luci-modulecache/* 2>/dev/null
exit 0
