#!/usr/local/bin/cbsd
#v10.1.0
MYARG=""
MYOPTARG="shownode display node header mode"
MYDESC="Show registered basejail for jails"
CBSDMODULE="jail,sys"
ADDHELP="
${H3_COLOR}Description${N0_COLOR}:

Show basejail for jails.

${H3_COLOR}Options${N0_COLOR}:

 ${N2_COLOR}shownode=${N0_COLOR} - set '1' to show nodename for jails
 ${N2_COLOR}node=${N0_COLOR}     - only for current node
 ${N2_COLOR}header=${N0_COLOR}   - set '0' to skip print header
 ${N2_COLOR}display=${N0_COLOR}  - list by comma for column,
             default: platform,name,basename,arch,targetarch,ver,stable,elf,status,date
               additional: source

${H3_COLOR}Examples${N0_COLOR}:

 # cbsd bases
 # cbsd bases display=ver,arch,source

${H3_COLOR}See also:${N0_COLOR}

 # cbsd kernel --help
 # cbsd register_base --help
 # cbsd unregister_base --help

"

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

. ${cbsdinit}

[ -z "${display}" ] && display="platform,name,basename,arch,targetarch,ver,stable,elf,status,date"

#remove commas for loop action on header
mydisplay=$( echo ${display} | ${TR_CMD} ',' '  ' )

# upper for header
myheader=$( echo ${mydisplay} | ${TR_CMD} '[:lower:]' '[:upper:]' )

show_header()
{
	local _header="${H1_COLOR}${BOLD}${myheader}${N0_COLOR}"
	[ ${header} -ne 0 ] && ${ECHO} "${_header}"
}

# if $1 = "Unregister" then overwrite status to "Unregister"
populate_output_data()
{
	local _i _val src_size

	_status=

	#populate values for in output string
	for _i in ${mydisplay}; do
		_val=
		eval _val=\$$_i
		[ -z "${_val}" ] && _val="-"

		if [ "${_i}" = "basename" ]; then
			[ "${_val}" = "0" ] && _val="-"
		fi

		if [ -z "${_status}" ]; then
			_status="${N0_COLOR}${_val}"
		else
			_status="${_status} ${_val}"
		fi
	done
}


# $1 - which file from. Eg: local
show_basesdata_from_sql()
{
	local _i

	#   set sqlfile for ". rcconf" including
	if [ -n "${1}" ]; then
		sqlfile="$1"
	else
		sqlfile="local"
	fi

	_sql="SELECT platform,name,basename,arch,targetarch,ver,stable,elf,status,date,source FROM bsdbase"

	OIFS="${IFS}"
	IFS="|"
	sqldelimer="|"

	cbsdsqlro ${sqlfile} ${_sql} | while read platform name basename arch targetarch ver stable elf status date source; do
		IFS="${OIFS}"
		populate_output_data
		printf "${N2_COLOR}"
		printf "${_status}"
		printf "${N0_COLOR}\n"
		IFS="|"
	done
	IFS="${OIFS}"
}

show_remote()
{
	show_header

	[ -z "${node}" ] && node=$( cbsd node mode=list header=0 allinfo=0 )

	for _n in ${node}; do
		nodename="${_n}"
		show_basesdata_from_sql "inv.${_n}"
	done
}

show_local()
{
	local _errcode _status

	show_header
	show_basesdata_from_sql local
}

show_bases()
{
	if [ -n "${node}" ]; then
		show_remote
		exit
	fi

	show_local
}

#### MAIN
[ -z "${header}" ] && header=1
show_bases | ${COLUMN_CMD} -t
