#!/bin/sh -eu

. ddns-sh-functions

del_net()
{
	local ipv="$1";shift
	local ip="$1";shift
	local zone

    echo "remove network $ip" >&2
    ddns_list_domain|
	while read zone; do
	    ddns_domain_del_net "$zone" "$ip" "$ipv"
	done
}

change_net()
{
	local ipv="$1";shift
	local old_configuration="$1";shift
	local new_configuration="$1";shift
	local old_ip="$1";shift
	local new_ip="$1";shift

	[ "$old_configuration" = "static" ] || return 0

	if [ "$new_configuration" = "dhcp" -o "$new_configuration" = "ipv4ll" ];then
		del_net "$ipv" "$old_ip"
	elif [ "$old_ip" != "$new_ip" ];then
		local addr_is_in_subnet=
		if [ "$ipv" = 4 ]; then
			addr_is_in_subnet=ipv4_ip_subnet
		else
			addr_is_in_subnet=ipv6addr_is_in_subnet
		fi
		if [ "${old_ip##*/}" == "${new_ip##*/}" ] && $addr_is_in_subnet "${new_ip%%/*}" "$old_ip"; then
			ddns_list_domain|
				while read zone;do
				ddns_domain_list_host "$zone" "$ipv"|
					while read ip host; do
					[ "$ip" = "${old_ip%%/*}" ] || continue
					echo "rename host $host:${old_ip%%/*} -> ${new_ip%%/*}" >&2
					ddns_domain_del_host "$zone" "${old_ip%%/*}" "$host" "$ipv"
					ddns_domain_add_host "$zone" "${new_ip%%/*}" "$host" "$ipv"
					done
				done
		else
			del_net "$ipv" "$old_ip"
		fi
	fi
}

old_ipv4="$(echo "$old_ipv4addresses" | head -1)"
new_ipv4="$(echo "$new_ipv4addresses" | head -1)"
old_ipv6="$(echo "$old_ipv6addresses" | head -1)"
new_ipv6="$(echo "$new_ipv6addresses" | head -1)"

if [ "$new_config_ipv4" = no ]; then
	del_net 4 "$old_ipv4"
else
	change_net 4 "$old_ipv4configuration" "$new_ipv4configuration" "$old_ipv4" "$new_ipv4"
fi
if [ "$new_config_ipv6" = no ]; then
	del_net 6 "$old_ipv6"
else
	change_net 6 "$old_ipv6configuration" "$new_ipv6configuration" "$old_ipv6" "$new_ipv6"
fi

#restart as it should bind on new IP
service_control bind restart
