#!/bin/sh /etc/rc.common
# Author Qier LU <lvqier@gmail.com>

START=19

gen_config_file() {
    local section="${1}"
    config_get enabled "${section}" "enabled"
    if [ ! ${enabled} ]
    then
        return
    fi
    [ ! -d /tmp/dnsmasq.d ] && mkdir -p /tmp/dnsmasq.d
    config_get ipset_name "${section}" "ipset_name"
    config_file_name="/tmp/dnsmasq.d/ipset-${ipset_name}.conf"
    rm -f "${config_file_name}"
    config_get_bool dns_forward "${section}" "dns_forward"
    if [ ${dns_forward} ]
    then
        config_get upstream_dns_server "${section}" "upstream_dns_server"
    fi
    handle_domain_ipt() {
        local domain="${1}"
        if [ ${dns_forward} ]
        then
            echo "server=/${domain}/${upstream_dns_server}" >> "${config_file_name}"
        fi
        echo "ipset=/${domain}/${ipset_name}" >> "${config_file_name}"
    }
    handle_domain_nft() {
        local domain="${1}"
        if [ ${dns_forward} ]
        then
            echo "server=/${domain}/${upstream_dns_server}" >> "${config_file_name}"
        fi
        echo "nftset=/${domain}/inet#fw4#${ipset_name}" >> "${config_file_name}"
    }
    if which nft > /dev/null
    then
        config_list_foreach "${section}" "managed_domain" handle_domain_nft
    else
        config_list_foreach "${section}" "managed_domain" handle_domain_ipt
    fi
    link_config() {
        local cfg="${1}"
        [ -d "/tmp/dnsmasq.${cfg}.d" ] && cp -f "${config_file_name}" "/tmp/dnsmasq.${cfg}.d/ipset-${ipset_name}.conf"
    }
    config_load dhcp
    config_foreach link_config dnsmasq
}

gen_config_files() {
    rm -f /tmp/dnsmasq*.d/ipset-*.conf
    config_load dnsmasq-ipset
    config_foreach gen_config_file ipsets
}

start() {
    gen_config_files
}

reload() {
    gen_config_files
    /etc/init.d/dnsmasq restart
}
