#!/bin/sh

# using function to not confuse function calls with existing ones inside /lib/functions.sh
update_ddns_config() {
	udc_uci="$(which uci) -q"	# ignore errors
	udc_pkg="ddns"
	udc_cfg=""
	udc_name=""
	udc_var=""
	udc_val=""
	package() { return 0; }
	config () {
		udc_cfg="$1"
		udc_name="$2"

		# Type = ddns	Name = global
		if [ "$udc_cfg" = "$udc_pkg" -a "$udc_name" = "global" ]; then
			option() { return 0; }
			# rename options
			$udc_uci rename $udc_pkg.$udc_name.allow_local_ip="upd_privateip"
			$udc_uci rename $udc_pkg.$udc_name.date_format="ddns_dateformat"
			$udc_uci rename $udc_pkg.$udc_name.log_dir="ddns_logdir"
			$udc_uci rename $udc_pkg.$udc_name.log_lines="ddns_loglines"
			$udc_uci rename $udc_pkg.$udc_name.run_dir="ddns_rundir"

		# Type = service	Name = ???
		elif [ "$udc_cfg" = "service" ]; then
			option() {
				udc_var="$1"; shift
				udc_val="$*"
				# fix some option service_name values
				case "$udc_var" in
					service_name)
						case "$udc_val" in
							freedns\.afraid\.org|afraid\.org)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="afraid.org-keyauth";;
							Bind-nsupdate)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="bind-nsupdate";;
							CloudFlare|cloudflare\.com)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="cloudflare.com-v1";;
							dyndns\.org|dyndns\.com)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="dyn.com";;
							free\.editdns\.net)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="editdns.net";;
							domains\.google\.com)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="google.com";;
							loopia\.com)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="loopia.se";;
							NoIP\.com|No-IP\.com)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="no-ip.com";;
							spdns\.de)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="spdyn.de";;
							strato\.de)
								$udc_uci set $udc_pkg.$udc_name.$udc_var="strato.com";;
							*)
								# all others leave unchanged
								;;
						esac
						# rename option service_name to option upd_provider
#						$udc_uci rename $udc_pkg.$udc_name.$udc_var="upd_provider"
						;;
					*)
						# leave all other options currently unchanged
						;;
				esac
				return 0
			}
			return 0

		# ignore unknown
		else
			return 0
		fi
	}

	# read package config file
	udc_data=$($udc_uci -S -n export "$udc_pkg")
	udc_ret="$?"
	# No error and udc_data then execute (eval)
	# this will call functions defined above
	[ "$udc_ret" -eq 0 -a -n "$udc_data" ] && eval "$udc_data"

	# add config ddns "global" (ignore error if exists)
	$udc_uci set ddns.global="$udc_pkg"

	# write changes to config file
	$udc_uci commit "$udc_pkg"

	unset udc_uci udc_pkg udc_cfg udc_name udc_var udc_val udc_ret udc_data
	return 0
}

# do existing config update
update_ddns_config

# clear Ludc_uci indexcache
rm -f /tmp/luci-indexcache >/dev/null 2>&1

return 0