#!/bin/sh /etc/rc.common

# shellcheck disable=SC2034 disable=SC2154

USE_PROCD=1

# starts after network starts
START=21
# stops before networking stops
STOP=89

PROG=/usr/sbin/nextdns

add_dnsmasq_opt() {
        mkdir -p /tmp/dnsmasq.d
        echo "$1" >> /tmp/dnsmasq.d/nextdns.conf
}

dnsmasq_reload() {
        # Reload dnsmasq is already running.
        if /etc/init.d/dnsmasq running; then
                /etc/init.d/dnsmasq reload
        fi
}

handle_host_config() {
    host_config_args="$host_config_args -config=$1"
}

start_service() {
        config_load nextdns
        config_get_bool enabled main enabled "1"
        rm -f /tmp/dnsmasq.d/nextdns.conf
        if [ "$enabled" = "1" ]; then
                config_get config main config ""
                config_list_foreach main host_config handle_host_config
                config_get listen main listen "127.0.0.1:5342"
                config_get_bool report_client_info main report_client_info "1"
                config_get_bool hardened_privacy main hardened_privacy "0"
                config_get_bool log_queries main log_queries "0"

                # Add a custom configuration for dnsmasq.
                server=$(echo "$listen" | sed -e 's/:/#/')
                add_dnsmasq_opt "server=$server"
                add_dnsmasq_opt "no-resolv"
                if [ "$report_client_info" = "1" ]; then
                        add_dnsmasq_opt "add-mac"
                        add_dnsmasq_opt "add-subnet=32,128"
                fi

                procd_open_instance
                # shellcheck disable=SC2086
                procd_set_param command "$PROG" run \
                        -listen="$listen" \
                        $host_config_args \
                        -config="$config" \
                        -report-client-info="$report_client_info" \
                        -hardened-privacy="$hardened_privacy" \
                        -log-queries="$log_queries"
                procd_set_param stdout 1
                procd_set_param stderr 1
                procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
                procd_close_instance
        fi

        dnsmasq_reload
}

stop_service() {
        rm -f /tmp/dnsmasq.d/nextdns.conf
        dnsmasq_reload
}

service_triggers() {
        procd_add_reload_trigger "nextdns"
}