#!/usr/local/bin/cbsd
#v10.0.2
CBSDMODULE="jail"
MYARG="jname type mode file"
MYDESC="Import or export from/to ascii rctl.conf from/to SQLite3 tables for jail"
ADDHELP="type= rctl or extra\n\"
mode= tosql or to tofile\n\
file= ascii file\n"

. ${subrdir}/nc.subr
. ${sharedir}/rctl.conf
. ${subrdir}/jrctl.subr
. ${tools}

. ${cbsdinit}

header() {
${CAT_CMD} >${file} <<EOF
# DO NOT EDIT THIS FILE. PLEASE USE INSTEAD:
# cbsd jrctl-tui jname=${jname}
EOF
}

tofile()
{
	${TRUNCATE_CMD} -s0 ${file}

	case "${type}" in
		"rctl")
			header
			for i in ${RCTL}; do
				VAL=$( cbsdsqlro local "SELECT ${i} FROM rctl WHERE jname='${jname}'" )
				[ "${VAL}" = "(null)" -o -z "${VAL}" -o "${VAL}" = "0" ] && continue
				case "${i}" in
					readbps|writebps|readiops|writeiops)
						echo "${i}:throttle=${VAL}" > ${file}
					;;
					*)
						echo "${i}:deny=${VAL}" > ${file}
					;;
				esac
			done
			;;
		"extra")
			header
			for i in ${RCTL_EXTRA}; do
				VAL=$( cbsdsqlro local "SELECT ${i} FROM rctl WHERE jname='${jname}'" )
				[ "${VAL}" = "(null)" -o -z "${VAL}" -o "${VAL}" = "0" ] && continue
				echo "${i}=${VAL}" > ${file}
			done
			;;
		*)
			err 1 "${N1_COLOR}type= must be 'rctl' or 'extra'${N0_COLOR}"
			;;
	esac
}

tosql()
{
	local _myval _items _res
	_num=0

	[ ! -f "${file}" ] && err 1 "${N1_COLOR}No such file: ${N2_COLOR}${file}${N0_COLOR}"

	case "${type}" in
		"rctl")
			eval $( ${TR_CMD} ":=" " " < ${file} | ${AWK_CMD} -F " " '{printf("%s=\"%s\"\n", $1,$3); }' )
			;;
		"extra")
			eval $( ${CAT_CMD} ${file} )
			;;
	esac

	_res=$( cbsdsqlro local "SELECT jname FROM rctl WHERE jname='${jname}'" )
	[ -z "${_res}" ] && cbsdsqlrw local "INSERT INTO rctl ( jname ) VALUES ( \"${jname}\" )"

	case "${type}" in
		"rctl")
			for _items in ${RCTL}; do
				eval _myval=\$${_items}
				[ -z "${_myval}" ] && _myval="0"
				cbsdsqlrw local "UPDATE rctl SET ${_items}=\"${_myval}\" WHERE jname='${jname}'"
			done
			;;
		"extra")
			for _items in ${RCTL_EXTRA}; do
				eval _myval=\$${_items}
				[ -z "${_myval}"  ] && _myval="0"
				cbsdsqlrw local "UPDATE rctl SET ${_items}=\"${_myval}\" WHERE jname='${jname}'"
			done
			;;
	esac
}

# MAIN
case "${mode}" in
	"tofile")
		tofile
		;;
	"tosql")
		tosql
		;;
	*)
		err 1 "${N1_COLOR}mode= must be 'tosql' or 'tofile'${N0_COLOR}"
		;;
esac

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