#!/bin/sh

. /lib/functions.sh

CONFIG="firewall"
INDEX=1

config_cb() {
	local type="$1"
	local name="$2"
	local target=$(uci_get firewall "$name" target "")
	[ "$type" != "redirect" ] || [ "$target" != "SNAT" ]  && {
		option_cb() {
			return 0
		}
		list_cb() {
			return 0
		}
		return
	}

	[ "${name:0:3}" = "cfg" ] && {
		while uci_get "firewall" "$INDEX" >/dev/null
		do
			INDEX=$((INDEX + 1))
		done
		name=$INDEX
	}

	uci_add "$CONFIG" "nat" "$name"

	option_cb() {
		local option="$1"
		local value="$2"
		local name=$CONFIG_SECTION

		if [ "${name:0:3}" = "cfg" ]; then
			name=$INDEX
		else
			[ "$option" = "src_dip" ] || [ "$option" = "src_dport" ] || [ "$option" = "dest" ] && uci_remove "$CONFIG" "$name" "$option"
		fi

		[ "$option" = "src_dip" ] && option="snat_ip"
		[ "$option" = "src_dport" ] && option="snat_port"
		[ "$option" = "dest" ] && option="src"

		uci_set "$CONFIG" "$name" "$option" "$value"
	}

	list_cb() {
		local option="$1"
		local value="$2"
		[ "${CONFIG_SECTION:0:3}" != "cfg" ] && return
		uci_add_list "$CONFIG" "$INDEX" "$option" "$value"
	}

	[ "${2:0:3}" = "cfg" ] && uci_remove "$CONFIG" "$2"
}

config_load "$CONFIG"
uci_commit "$CONFIG"