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

START=90
STOP=10
USE_PROCD=1

append_bool() {
	config_get_bool tbool "$1" "$2"
	v=$(echo "$2" | sed 's/_/-/g')
	[ -z "$tbool" ] && tbool="$3"
	[ "$tbool" -eq 1 ] && procd_append_param command "--${v}"
}

append_bool_no() {
	config_get_bool tbool "$1" "$2"
	v=$(echo "$2" | sed 's/_/-/g')
	[ -z "$tbool" ] && tbool="$3"
	[ "$tbool" -eq 0 ] && procd_append_param command "--no-${v}"
	[ "$tbool" -eq 1 ] && procd_append_param command "--${v}"
}

append_param() {
	config_get tparam "$1" "$2"
	name=$(echo "$2" | sed 's/_/-/g')
	[ -n "$tparam" ] && procd_append_param command "--${name}=${tparam}"
}

start_instance() {
	cfg=$1

	config_get_bool enabled "$cfg" "enabled" 0
	[ "$enabled" -eq 1 ] || return 0

	procd_open_instance "$cfg"
	procd_set_param command /usr/bin/readsb
	procd_append_param command "--quiet"

	procd_set_param respawn
	procd_set_param stderr "1"
	procd_set_param stdout "1"

	append_bool "$cfg" beast_crc_off 0
	append_bool "$cfg" beast_df045_on 0
	append_bool "$cfg" beast_df1117_on 0
	append_bool "$cfg" beast_fec_off 0
	append_bool "$cfg" beast_mlat_off 0
	append_bool "$cfg" beast_modeac 0
	append_bool "$cfg" dcfilter 0
	append_bool "$cfg" enable_agc 0
	append_bool "$cfg" enable_biastee 0
	append_bool "$cfg" forward_mlat 0
	append_bool "$cfg" gnss 0
	append_bool "$cfg" metric 0
	append_bool "$cfg" mlat 0
	append_bool "$cfg" modeac 0
	append_bool "$cfg" net 1
	append_bool "$cfg" net_only 0
	append_bool "$cfg" net_verbatim 0
	append_bool "$cfg" no_crc_check 0
	append_bool "$cfg" no_modeac_auto 0
	append_bool "$cfg" onlyaddr 0
	append_bool "$cfg" stats 0
	append_bool "$cfg" stats_range 0

	append_bool_no "$cfg" fix 1

	for param in \
		beast_serial \
		debug \
		device \
		device_type \
		freq \
		gain \
		json_location_accuracy \
		lat \
		lon \
		max_range \
		net_beast_reduce_interval \
		net_beast_reduce_out_port \
		net_bi_port \
		net_bind_address \
		net_bo_port \
		net_buffer \
		ppm \
		stats_every \
		write_json \
		write_json_every
	do
		append_param "$cfg" "$param"
	done

	config_get net_connector "$cfg" "net_connector"
	[ -z "$net_connector" ] || {
		for conn in $net_connector; do
			procd_append_param command --net-connector="$conn"
		done
	}

	procd_close_instance
}

start_service() {
	config_load readsb
	config_foreach start_instance readsb
}