#!/usr/local/bin/cbsd
#v11.1.4
MYARG="jname"
CBSDMODULE="bhyve"

. ${subr}
. ${sharedir}/bhyve.conf

#concat for bhyve arg
JARG="${MYCOL} nice"

MYOPTARG="$JARG"
MYDESC="Modify parameter for jail"
ADDHELP="mode=force for modification on the running jail\n"

. ${tools}
. ${strings}
init $*

emulator="bhyve"	# for jname_is_multiple
jname_is_multiple

if [ -n "${jail_list}" ]; then
	new_arg=

	for i in $*; do
		_is_jname=$( substr --pos=0 --len=5 --str=${i} )
		[ "${_is_jname}" = "jname" ] && continue
		new_arg="${new_arg} ${i}"
	done

	for jname in ${jail_list}; do
		bset jname=${jname} ${new_arg}
	done
	exit 0
fi

[ -z "${cbsd_queue_name}" ] && cbsd_queue_name="/clonos/bhyvevms/"

update_jails()
{
	eval TMPVAL="\$$i"

	# restore spaces from '%' ( see todo in init func from nc.subr for val="one two" )
	VAL=$( echo "${TMPVAL}" | /usr/bin/tr '%' ' ' )

	case "${i}" in
		vm_ram)
			if is_number ${VAL}; then
				if conv2bytes ${VAL}; then
					VAL="${convval}"
				fi
			else
				# Assume value in MB, convert it to bytes
				VAL=$(( ${VAL} * 1024 * 1024 ))
			fi
		;;
	esac

	[ -z "${i}" ] && return 0

	case "${i}" in
		nice)
			_formfile="${jailsysdir}/${jname}/helpers/brctl.sqlite"
			if [ ! -r ${_formfile} ]; then
				${ECHO} "${MAGENTA}No such rctl file: ${GREEN}${_formfile}${NORMAL}"
				return 1
			fi
			cbsdsql ${_formfile} UPDATE forms set cur=\"${VAL}\" WHERE param=\"nice\"
			brenice jname=${jname}
			;;
		*)
			cbsdsql ${jailsysdir}/${jname}/local.sqlite UPDATE settings SET ${i}=\"${VAL}\"

			# back compatible
			cbsdsql local UPDATE bhyve SET ${i}=\"${VAL}\" WHERE jname=\"${jname}\"
			;;
	esac

	cbsdlogger NOTICE ${CBSD_APP}: ${argpart}: ${VAL}
	${ECHO} "${argpart}: ${MAGENTA}changed${NORMAL}"

}

# here we get status from jstatus, not via jrcconf for non-overwriting params in args
jid=$( jstatus jname=${jname} )
[ $? -eq 0 ] && err 1 "${MAGENTA}No such jail: ${GREEN}${jname}${NORMAL}"

if [ -x "${moduledir}/cbsd_queue.d/cbsd_queue" ]; then
	allstr="$@"
	[ "${cbsd_queue_name}" != "none" ] && cbsd_queue cbsd_queue_name=${cbsd_queue_name} id="${jname}" cmd=update ${allstr}
fi

for n in "$@"; do
	argpart="${n%%=*}"

	for i in ${JARG}; do
		if [ "${argpart}" = "${i}" -a "${argpart}" != "jname" ]; then
			update_jails
		fi
	done
done

# exit code 0 is nessesary for dot()
exit 0
