#!/usr/local/bin/cbsd
#
# dialog_menu_main
#
# Display the dialog(1)-based application main menu.
#
dialog_menu_main()
{
	local _input _retval

	local btitle="$DIALOG_BACKTITLE"
	local title=" ${jname} ${nic}: New NIC "
	hline=
	local defaultitem=

	local prompt="${_desc}"

	f_dialog_default_fetch defaultitem

	[ -z "${nic_driver}" ] && nic_driver="vtnet"
	[ -z "${nic_type}" ] && nic_type="0"
	[ -z "${nic_parent}" ] && nic_parent="auto"
	[ -z "${nic_hwaddr}" ] && nic_hwaddr="0"
	[ -z "${nic_address}" ] && nic_address="0"

	local menu_list="
		'nic_name'	'${nic_name}'		'NIC name'
		'nic_parent'	'${nic_parent}'		'NIC parent interface. 0 - auto'
		'nic_hwaddr'	'${nic_hwaddr}'		'Mac address. 0 - auto'
		'nic_address'	'${nic_address}'	'NIC epairA ip4_addr (host side). 0 - disabled'
		'-'		'-'			''
		'COMMIT'	'COMMIT'		'Create and attach new NIC'
	" # END-QUOTE

	cbsd_menubox_with_help
	retval=$?

	f_dialog_data_sanitize menu_choice
	f_dialog_menutag_store "$menu_choice"
	f_dialog_default_store "$menu_choice"

	return ${retval}
}


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

MYARG="jname nic"
MYOPTARG=""
MYDESC="add/attach new vitual NIC to jail-vnet"
MYOPTARG="out"
ADDHELP="out - generate config only (e.g. for non-existance new jail)\n"
CBSDMODULE="jail"

. ${subrdir}/nc.subr
. ${tools}
. ${strings}
. ${dialog}
. ${cbsdinit}

. ${subrdir}/bsdconfig.subr
. $BSDCFG_LIBE/$APP_DIR/include/messages-jailnic.subr

if [ -z "${out}" ]; then
	. ${subrdir}/rcconf.subr
	[ $? -eq 1 ] && err 1 "${N1_COLOR}no such env: ${N2_COLOR}${jname}${N0_COLOR}"
	[ "${emulator}" != "jail" ] && err 1 "${N1_COLOR}not in jail mode${N0_COLOR}"
	mysqlite="${jailsysdir}/${jname}/local.sqlite"
else
	mysqlite="${out}"

	. ${subrdir}/rcconf.subr
	if [ $? -eq 1 ]; then
		# create new database when jail/db not exist
		if [ ! -r ${mysqlite} ]; then
			/usr/local/bin/cbsd ${miscdir}/updatesql ${mysqlite} ${distdir}/share/local-jailnic.schema jailnic
			cbsdsqlrw ${mysqlite} "INSERT INTO jailnic ( name,nic_order,nic_slot,nic_parent,nic_hwaddr,nic_address ) VALUES ( \"epairb\",\"0\",\"0\",\"auto\",\"${nic_hwaddr}\",\"${nic_address}\" )"
		fi
	fi
fi

. $BSDCFG_LIBE/$APP_DIR/include/jailnic.subr

. ${subrdir}/settings-tui-jail.subr
. ${subrdir}/vnet.subr

#load_nic_info

# 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_add_jailnic "
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
f_mustberoot_init

last_nic=$( find_first_free_nic_id )
nic_name="nic${last_nic}"

#
# Loop over the main menu until we've accomplished what we came here to do
#
while :; do
	dialog_menu_main
	ret=$?

	command=
	case $ret in
		${DIALOG_OK})
			case "$mtag" in
				?" $msg_exit")
					break
					;;
				"-"|nic_name|slot|nic_type)
					continue
					;;
				"nic_hwaddr")
					get_construct_nic_hwaddr
					;;
				"nic_address")
					get_construct_nic_address
					;;
				"nic_parent")
					interface="${nic_parent}"
					get_nic_parent && nic_parent="${interface}"
					;;
				"COMMIT")
					for i in nic_name nic_hwaddr nic_parent nic_address; do
						_val=
						eval _val="\$$i"
						if [ -z "${_val}" ]; then
							f_dialog_msgbox "${i} is mandatory"
							break
						fi
					done
					_res=$( add_nic -h "${nic_hwaddr}" -n "${nic_name}" -p "${nic_parent}" )
					if [ $? -ne 0 ]; then
						f_dialog_msgbox "Error: ${_res}"
					else
						f_die
					fi
					;;
				*)
					index=${mtag%% *}
					nic=${mtag##* }
					command="jailnic-cfgnic jname=${jname} nic=${nic}"
					;;
			esac
			;;
		${DIALOG_HELP})
			get_help
			continue
			;;
		*)
			f_die
			;;
	esac
done

return $SUCCESS

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