#!/usr/local/bin/cbsd
#v10.1.0
globalconf="${distdir}/cbsd.conf";
CBSDMODULE="bhyve"
MYDESC="Ncurses based control for bhyve"
MYARG="jname"
MYOPTARG=""

set -e
. ${globalconf}
set +e

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

[ -z "${1}" ] && select_jail_by_list -s "List of local VMs:" -r 0 -e bls
. ${cbsdinit}

. ${dialog}

dialog_menu_main()
{
	repo=0 # flags for execution jsetup-tui from repo get image

	title=" Control for ${jname} "
	hline=

	local menu_list="
		'EXIT'	'EXIT'	'Exit'
	" # END-QUOTE

	if [ ${jid} -ne 0 ]; then
			menu_list="${menu_list} 'bstop'		'stop vm'		'cbsd bstop jname=${jname}'"
			menu_list="${menu_list} 'blogin'	'attach to console'	'cbsd blogin jname=${jname}. Use Ctrl+b,d to detach (tmux)'"
		else
			menu_list="${menu_list} 'bstart'	'start vm'	'cbsd bstart jname=${jname}'"
	fi

	menu_list="${menu_list}	'bconfig'	'config'	'cbsd bconfig jname=${jname}'"
	menu_list="${menu_list}	'-'	'-'	''"
	menu_list="${menu_list}	'bremove'	'destroy vm'	'cbsd bremove jname=${jname}'"

	cbsd_menubox
	retval=$?

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

	return $retval
}

### MAIN
. ${subrdir}/rcconf.subr
[ $? -eq 1 ] && err 1 "${N1_COLOR}No such jail: ${N2_COLOR}${jname}${N0_COLOR}"

f_dialog_title "$msg_system_console_configuration"
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
f_mustberoot_init

while [ 1 ]; do
	. ${subrdir}/rcconf.subr
	dialog_menu_main || f_die
	case "${mtag}" in
		"EXIT")
			exit 0
			;;
		bstart|bstop)
			/usr/local/bin/cbsd ${mtag} jname=${jname}
			echo " *** Complete. Press any key"
			read p
			;;
		blogin)
			vm_efi=$( cbsdsqlro local "SELECT vm_efi FROM bhyve WHERE jname=\"${jname}\"" )
			vnc_bind=$( cbsdsqlro local "SELECT bhyve_vnc_tcp_bind FROM bhyve WHERE jname=\"${jname}\"" )

			if [ "${vm_efi}" != "none" ]; then
				if [ -f "${jailsysdir}/${jname}/vnc_port" ]; then
					vm_port=$( ${CAT_CMD} ${jailsysdir}/${jname}/vnc_port )
					echo " *** VM booted in VNC mode. ***"
					${ECHO} "${N1_COLOR}For attach VM console, use: ${N2_COLOR}vncviewer ${bhyve_vnc_tcp_ipconnect}:${vm_port}${N0_COLOR}"
					read p
				else
					echo " *** VM booted in VNC mode. ***"
					echo "But no ${jailsysdir}/${jname}/vnc_port file"
					read p
				fi
			else
				/usr/local/bin/cbsd ${mtag} jname=${jname}
			fi
			;;
		bremove)
			if getyesno "Remove vm from filesystem. Are you sure ?"; then
				/usr/local/bin/cbsd ${mtag} jname=${jname}
				echo " *** Complete. Press any key"
				read p
				f_die
			fi
			;;
		"bconfig")
			/usr/local/bin/cbsd bconfig jname=${jname}
			;;
	esac
done

exit 0
