#!/bin/sh

. /lib/functions.sh

remotes=""

collect_remote() {
	append remotes "$1"
}

# Collect remotes
config_load ipsec
config_foreach collect_remote remote

for old in $remotes; do
	new="${old}_static"

	# already migrated (or a name collision) - the sid itself may
	# end in _static, so check the target name instead
	[ -n "$(uci -q get "mwan3.${new}")" ] && continue

	# Interface section
	uci_rename mwan3 "$old" "$new"

	# Member sections
	uci_rename mwan3 "${old}_member_mwan" "${new}_member_mwan"
	uci_rename mwan3 "${old}_member_balance" "${new}_member_balance"

	# Member interface references
	uci_set mwan3 "${new}_member_mwan" interface "$new"
	uci_set mwan3 "${new}_member_balance" interface "$new"

	# Policy section: mwan_ipsec_<sid5> (16 chars) exceeded mwan3's 15-char
	sid5="$(echo "$old" | cut -c1-5)"
	old_policy="mwan_ipsec_${sid5}"
	new_policy="mwan_ips_${sid5}"
	uci_rename mwan3 "$old_policy" "$new_policy"

	# update policy use_member and rule use_policy references
	uci_load mwan3

	fix_policy_members() {
		local section="$1"

		local values
		values="$(uci_get mwan3 "$section" use_member)"

		[ -n "$values" ] || return

		for v in $values; do
			case "$v" in
				"${old}_member_mwan")
					uci_remove_list mwan3 "$section" use_member "$v"
					uci_add_list mwan3 "$section" use_member "${new}_member_mwan"
					;;
				"${old}_member_balance")
					uci_remove_list mwan3 "$section" use_member "$v"
					uci_add_list mwan3 "$section" use_member "${new}_member_balance"
					;;
			esac
		done
	}

	config_foreach fix_policy_members policy

	fix_rule_policy() {
		local section="$1"

		local val
		val="$(uci_get mwan3 "$section" use_policy)"

		[ "$val" = "$old_policy" ] || return

		uci_set mwan3 "$section" use_policy "$new_policy"
	}

	config_foreach fix_rule_policy rule

	# condition interface references
	fix_condition() {
		local section="$1"

		local val
		val="$(uci_get mwan3 "$section" interface)"

		[ "$val" = "$old" ] || return

		uci_set mwan3 "$section" interface "$new"
	}

	config_foreach fix_condition condition

done

uci_commit mwan3

exit 0
