#!/bin/sh

# UCI defaults for ZeroBlock
uci -q batch <<-EOF >/dev/null
	delete ucitrack.@zeroblock[-1]
	add ucitrack zeroblock
	set ucitrack.@zeroblock[-1].init=zeroblock
	commit ucitrack
EOF

# Create a minimal modern skeleton only if the main package config is missing.
# The canonical full schema lives in the zeroblock package; daemon startup
# runtime defaults will fill any omitted current options.
if [ ! -f /etc/config/zeroblock ]; then
	uci -q batch <<-EOF
		set zeroblock.settings=settings
		set zeroblock.settings.schema_version='49'
		set zeroblock.settings.log_level='warn'
		set zeroblock.settings.show_trace_logs='0'
		set zeroblock.settings.show_soft_matrix_editor='0'
		set zeroblock.settings.soft_decision_matrix_enabled='0'
		set zeroblock.settings.soft_routing_matrix_enabled='0'
		set zeroblock.settings.show_custom_config_editor='0'
		set zeroblock.settings.health_enabled='1'
		set zeroblock.settings.dns_recovery_enabled='1'
		set zeroblock.settings.dns_recovery_mode='permanent'
		set zeroblock.settings.dns_recovery_main_candidates_enabled='0'
		set zeroblock.settings.dns_recovery_bootstrap_candidates_enabled='0'
		set zeroblock.settings.health_interval='600'
		set zeroblock.settings.health_dns_check='1'
		set zeroblock.settings.health_ping_ip='77.88.8.8 8.8.8.8'
		set zeroblock.settings.health_opera_host='ya.ru google.com'
		set zeroblock.settings.update_interval='1d'
		set zeroblock.settings.timeout_dnsmasq_restart='15'
		set zeroblock.settings.timeout_xray_check='15'
		set zeroblock.settings.timeout_dns_bootstrap_probe_stop='1'
		set zeroblock.settings.disable_startup_check='0'
		set zeroblock.settings.wait_for_default_route='0'
		set zeroblock.settings.manage_xray='1'
		set zeroblock.settings.api='v2'

		set zeroblock.engine=engine
		set zeroblock.engine.log_level='warn'
		set zeroblock.engine.dns_type='doh'
		set zeroblock.engine.dns_server='dns.google'
		set zeroblock.engine.dns_runtime_fallback_enabled='0'
		set zeroblock.engine.dns_runtime_fallback_strategy='sequential'
		set zeroblock.engine.dns_runtime_fallback_timeout='3'
		set zeroblock.engine.dns_runtime_fallback_candidates_enabled='0'
		set zeroblock.engine.bootstrap_dns_server='77.88.8.8'
		set zeroblock.engine.dns_rewrite_ttl='60'
		set zeroblock.engine.dns_strategy='ipv4_only'
		set zeroblock.engine.use_zeroblock_dns_directly='0'
		set zeroblock.engine.dns_optimistic_cache='0'
		set zeroblock.engine.autoremove_static_lease='1'
		set zeroblock.engine.clash_api_enabled='1'
		set zeroblock.engine.clash_api_port='9090'
		set zeroblock.engine.clash_ui_panel='yacd'
		set zeroblock.engine.udp_mapping='endpoint_independent'
		set zeroblock.engine.udp_filtering='endpoint_independent'
		set zeroblock.engine.udp_nat_max='0'
		set zeroblock.engine.tproxy_mark='0x10000'
		set zeroblock.engine.direct_mark='0x20000'
		set zeroblock.engine.bt_mark='0x40000'
		set zeroblock.engine.ctmark_dns='0x10000'
		set zeroblock.engine.ctmark_bt='0x40000'
		set zeroblock.engine.disable_quic='1'
		set zeroblock.engine.disable_quic_gso='0'
		set zeroblock.engine.tls_fragment='0'
		set zeroblock.engine.tls_record_fragment='0'
		set zeroblock.engine.xray_fragment='0'
		set zeroblock.engine.exclude_ipsec='0'
		set zeroblock.engine.desync_mark='0x40000000'

		set zeroblock.auto_config=auto_config

		set zeroblock.dashboard=dashboard
		set zeroblock.diagnostic=diagnostic

		commit zeroblock
	EOF
fi

LOG_MODULES="
config_proxies
disable_fakeip
proxy_orchestrator
subscription_parser
xray_generator
"

changed=0

if ! uci -q get zeroblock.settings >/dev/null 2>&1; then
	uci -q set zeroblock.settings='settings'
	changed=1
fi

for module in $LOG_MODULES; do
	option="log_${module}"
	if ! uci -q get "zeroblock.settings.${option}" >/dev/null 2>&1; then
		uci -q set "zeroblock.settings.${option}=1"
		changed=1
	fi
done

[ "$changed" = "1" ] && uci -q commit zeroblock

exit 0
