# xinetd output backend
# shellcheck shell=bash

gen_xinetd_entry() {
	printf '%s\n' "service $(basename "${service[ExecStart]// */}")"
	printf '%s\n' '{'

	printf '%s\n' "    disabled = no"

	if [[ "${socket[ListenStream]:-}" ]]; then
		printf '%s\n' "    port = ${socket[ListenStream]}"
		printf '%s\n' "    socket_type = stream"
		printf '%s\n' "    wait = no"
	elif [[ "${socket[ListenDatagram]:-}" ]]; then
		printf '%s\n' "    port = ${socket[ListenDatagram]}"
		printf '%s\n' "    socket_type = dgram"
		printf '%s\n' "    protocol = udp"
		printf '%s\n' "    wait = yes"
	elif [[ "${socket[ListenSequentialPackets]:-}" ]]; then
		printf '%s\n' "    port = ${socket[ListenSequentialPackets]}"
		printf '%s\n' "    socket_type = seqpacket"
		printf '%s\n' "    protocol = udp"
		printf '%s\n' "    wait = yes"
	fi

	printf '%s\n' "    user = ${service[User]:-root}"
	server=${service[ExecStart]%% *}
	printf '%s\n' "    server = $server"
	server_args=${service[ExecStart]#"${server}"}
	printf '%s\n' "    server_args = ${server_args# }"

	printf '%s\n' '}'
}

export_inetd() {
	systemd_unit=$1
	base_dir=$2
	xinetd_dir="${base_dir}/xinetd.d"
	mkdir -p "${xinetd_dir}"

	xinetd_file="${xinetd_dir}/$(basename "${systemd_unit}" .socket)"
	# generate a xinetd configuration file
	gen_xinetd_entry "${systemd_unit%%.socket}" >"${xinetd_file}"
}
