#!/usr/local/bin/cbsd
. ${subrdir}/nc.subr
. ${strings}
. ${tools}
. ${nodes}

# dialog_menu_main
#
# Display the dialog(1)-based application main menu.
#
dialog_menu_main()
{
	local title="$DIALOG_TITLE"
	local btitle="$DIALOG_BACKTITLE"
	local prompt=""
	local menu_list="
		'A $msg_show_summary'	''	'cbsd summary'
		'B $msg_add_new_node'	''	'cbsd node mode=add'
		'-'			'-'	''
	" # END-QUOTE
	local defaultitem=
	local hline="$hline_arrows_tab_enter"

	local f_dialog_title=" CBSD Node Management "

	local sqldelimer=" "

	local i=1
	local num

	eval $( cbsdsqlro nodes SELECT nodename,ip,idle FROM nodelist | while read _nodename ip idle; do
		echo "local node${i}_name=\"${_nodename}\""
		echo "local node${i}_ip=\"${ip}\""

		conv_idle
		echo "local node${i}_status=\"${status}\""
		i=$(( i + 1 ))
	done )

	for i in $( ${SEQ_CMD} 1 255 ); do
		eval node_name="\$node${i}_name"
		[ -z "${node_name}" ] && break
		eval node_ip="\$node${i}_ip"
		eval node_status="\$node${i}_status"
		menu_list="$menu_list '$i ${node_name}'	'${node_status}'	'Node IP: ${node_ip}'"
	done

	eval f_dialog_menu_with_help_size height width rows \
		\"\$title\"  \
		\"\$btitle\" \
		\"\$prompt\" \
		\"\$hline\"  \
		$menu_list

	height=$(( height + 1 ))

	# Obtain default-item from previously stored selection
	f_dialog_default_fetch defaultitem

	local menu_choice
	menu_choice=$( eval $DIALOG \
		--clear                                 \
		--title \"\$title\"                     \
		--backtitle \"\$btitle\"                \
		--hline \"\$hline\"                     \
		--item-help                             \
		--ok-label \"\$msg_ok\"                 \
		--cancel-label \"Exit\"                 \
		${USE_XDIALOG:+--help \"\"}             \
		--default-item \"\$defaultitem\"        \
		--menu \" \$prompt \"                   \
		$height $width $rows                    \
		$menu_list                              \
		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
	)

	local retval=$?
	f_dialog_data_sanitize menu_choice
	f_dialog_menutag_store "$menu_choice"

	# Only update default-item on success
	[ $retval -eq $DIALOG_OK ] && f_dialog_default_store "$menu_choice"

	return $DIALOG_OK
}



############################################################ MAIN
export NOCOLOR=1

. ${cbsdinit}
. ${subrdir}/bsdconfig.subr

# Incorporate rc-file if it exists
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"

#
# Process command-line arguments
#
while getopts h$GETOPTS_STDARGS flag; do
	case "$flag" in
	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
	esac
done
shift $(( $OPTIND - 1 ))

#
# Initialize
#
f_dialog_title " $msg_configure_cbsd "
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
f_mustberoot_init

. $BSDCFG_LIBE/$APP_DIR/include/messages-nodecfg.subr
#
# Loop over the main menu until we've accomplished what we came here to do
#
while :; do
	dialog_menu_main || break
	f_dialog_menutag_fetch mtag

	[ -z "${mtag}" ] && exit $SUCCESS

	command=

	case "$mtag" in
		?" $msg_exit") break ;;
		?" $msg_add_new_node")
			command="node-add"
			;;
		?" $msg_show_summary")
			stats=$( ${MKTEMP_CMD} )
			trap "rm -f ${stats}" HUP INT ABRT BUS TERM EXIT
			summary > ${stats}
			f_show_help ${stats}
			rm -f ${stats}
			trap "" HUP INT ABRT BUS TERM EXIT
			;;
		*)
			index=${mtag%% *}
			node=${mtag##* }
			command="node-cfg node=${node}"
			;;
	esac

	if [ "$command" ]; then
		$BSDCFG_LIBE/$APP_DIR/$command ${USE_XDIALOG:+-X}
	fi
done

return $SUCCESS

################################################################################
# END
################################################################################
