#!/usr/local/bin/cbsd
#v12.1.5
CBSDMODULE="xen"
MYARG="jname"

unset jname

. ${subrdir}/nc.subr
. ${strings}

[ ! -r ${distsharedir}/xen_settings.conf ] && err 1 "${N1_COLOR}bset: no such file: ${N2_COLOR}${distsharedir}/bhyve_settings.conf${N0_COLOR}";
. ${distsharedir}/xen_settings.conf
ALL_ARGS="${MYCOL}"

MYOPTARG="${MYCOL} mode"
MYDESC="Get info related to xen domain"
ADDHELP="mode=quiet - return only value, without other string\n\
all - Returns all settings\n"
. ${cbsdinit}

[ -z "${jname}" ] && err 1 "Give me jname"
. ${subrdir}/rcconf.subr
if [ $? -eq 1 ]; then
	#
	# try_remote, todo
	sqlfile_sysdir="${tmpdir}/${1}"
	err 1 "${N1_COLOR}No such xen: ${N2_COLOR}${jname}${N0_COLOR}"
else
	sqlfile_sysdir="${jailsysdir}"
fi
[ "${emulator}" != "xen" ] && err 1 "${N1_COLOR}not xen engine, emulator: ${N2_COLOR}${emulator}${N0_COLOR}"
if [ "${mode}" = "quiet" ]; then
	QUIET=1
else
	QUIET=0
fi

ARGS=				# known args ( MYCOL)
UNKNOWN_ARGS=			# unknown args ( external/custom ? )
ALL=0				# show all items

# exclude jname= and mode= params from args str
for i in $*; do
	prefix3=$( substr --pos=0 --len=3 --str=${i} )
	prefix5=$( substr --pos=0 --len=5 --str=${i} )
	prefix6=$( substr --pos=0 --len=6 --str=${i} )
	if [ "${prefix3}" = "all" ]; then
			ALL=1
			ARGS="${ALL_ARGS}"
			continue
	fi
	[ "${prefix5}" = "mode=" ] && continue
	[ "${prefix6}" = "jname=" ] && continue

	[ ${ALL} -eq 1 ] && continue

	is_known_args=0

	for _jarg in ${MYCOL}; do
		if [ "${_jarg}" = "${i}" ]; then
			ARGS="${ARGS} ${i}"
			is_known_args=1
			break
		fi
	done

	if [ ${is_known_args} -eq 0 ]; then
		UNKNOWN_ARGS="${UNKNOWN_ARGS} ${i}"
	fi
done

# empty known params and found unknown (+ third option in mind: custom_facts): so return all
[ -z "${ARGS}" -a -z "${UNKNOWN_ARGS}" ] && ARGS="${ALL_ARGS}"

for OID in ${ARGS}; do
	case "${OID}" in
		vnc)
			_vnc_port=$( cbsdsqlro ${sqlfile_sysdir}/${jname}/local.sqlite "SELECT vnc_port FROM settings LIMIT 1" )
			_xen_vnc_tcp_bind=$( cbsdsqlro ${sqlfile_sysdir}/${jname}/local.sqlite "SELECT xen_vnc_tcp_bind FROM settings LIMIT 1" )
			val="${_xen_vnc_tcp_bind}:${_vnc_port}"
			;;
		*)
			val=$( cbsdsqlro ${sqlfile_sysdir}/${jname}/local.sqlite "SELECT ${OID} FROM settings LIMIT 1" )
			;;
	esac

	[ "${val}" = "(null)" -o -z "${val}" ] && val=0

	if [ ${QUIET} -eq 1 ]; then
		echo "${val}"
	else
		echo "${OID}: ${val}"
	fi
done

# search for custom column output helper first
for OID in ${UNKNOWN_ARGS}; do
	[ ! -x ${jailsysdir}/${jname}/facts.d/${OID} ] && continue
	. ${subrdir}/jcreate.subr		# for export_jail_data_for_external_hook
	geniplist ${ip4_addr}                   # for ipvX_first_public-like vars
	export_jail_data_for_external_hook
	val=$( ${jailsysdir}/${jname}/facts.d/${OID} | ${HEAD_CMD} -1 | ${AWK_CMD} '{printf $1}' )
	if [ ${QUIET} -eq 1 ]; then
		echo "${val}"
	else
		echo "${OID}: ${val}"
	fi
done

exit 0
