#!/usr/local/bin/cbsd
#v10.0.3
globalconf="${distdir}/cbsd.conf";
MYARG=""
MYOPTARG="jname"
MYDESC="Stop virtualbox"
CBSDMODULE="virtualbox"
EXTHELP="wf_jstop_jstart"

set -e
. ${globalconf}
set +e

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

. ${subrdir}/virtualbox.subr

[ -z "${1}" ] && select_jail_by_list -s "List of online VMs" -a "On" -e vls -r ${sqlreplica}
. ${cbsdinit}

# MAIN
if [ $# -gt 1 ]; then
#	recursive stop
	JLIST=$*
	for jname in ${JLIST}; do
		/usr/local/cbsd/misc/daemonize -p ${ftmpdir}/vstop.${jname}.$$ /usr/local/bin/cbsd vstop jname=${jname}
		#lets save .pid file
		sleep 1
		[ -f "${ftmpdir}/vstop.${jname}.$$" ] && cbsd_pwait --pid=$( ${CAT_CMD} ${ftmpdir}/vstop.${jname}.$$ ) --timeout=${parallel}
	done

	wait_for_fpid -a stop

	err 0 "${N1_COLOR}Multiple stop: ${N2_COLOR}done${N0_COLOR}"
fi

[ -z "${jname}" ] && jname=$1

. ${subrdir}/rcconf.subr
[ $? -eq 1 ] && err 1 "${N1_COLOR}No such jail: ${N2_COLOR}${jname}${N0_COLOR}"
#[ ${jid} -eq 0 ] && err 1 "${N1_COLOR}Not Running: ${N2_COLOR}${jname}${N0_COLOR}"
[ "${emulator}" != "virtualbox" ] && err 1 "${N1_COLOR}Not in virtualbox mode${N0_COLOR}"


${VBOX_MGMT_CMD} controlvm ${jname} acpipowerbutton

# wait 15 seconds until vm is shutdown. After 15 sec and while vm is still alive
# apply hard stop

${ECHO} "${N2_COLOR}ACPI power button in progress.${N0_COLOR}"
printf "Wait for 30 seconds"

for i in $( /usr/bin/seq 1 30 ); do
	_state=$( ${VBOX_MGMT_CMD} showvminfo ${jname}| ${AWK_CMD} '/^State: /{print $2}' )
	if [ "${_state}" = "running" ]; then
		printf "."
		sleep 1
	else
		echo
		exit 0
	fi
done

${VBOX_MGMT_CMD} controlvm ${jname} poweroff
echo
exit 0
