#!/usr/local/bin/cbsd
CBSDMODULE=
CIXARG="mode"
CIXOPTARG="jname"
MYDESC="Manage environment volumes"
ADDHELP="

${H3_COLOR}Description${N0_COLOR}:

${H3_COLOR}Options${N0_COLOR}:

 ${N2_COLOR}arch=${N0_COLOR}              - <name>, use non-native architectures.

${H3_COLOR}Examples${N0_COLOR}:

${H3_COLOR}See also${N0_COLOR}:

  cbsd bases --help

"

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

volume_create_main()
{
	local _ret= _cmd=

	if [ ${zfsfeat} -eq 0 ]; then
		${MKDIR_CMD} ${workdir}/VOLUMES
		${ECHO} "${N1_COLOR}${CIX_APP}: main volume created: ${N2_COLOR}${workdir}/VOLUMES${N0_COLOR}"
		return 0
	fi

	. ${subrdir}/zfs.subr

	zfsmnt "${workdir}"

	if [ -z "${ZPOOL}" ]; then
		${MKDIR_CMD} ${workdir}/VOLUMES
		${ECHO} "${N1_COLOR}${CIX_APP}: main volume created: ${N2_COLOR}${workdir}/VOLUMES${N0_COLOR}"
		return 0
	fi

	readconf zfs.conf

	capture _cmd ${ZFS_CMD} create ${zfs_create_flags} -o mountpoint=${workdir}/VOLUMES ${ZPOOL}/VOLUMES
	${_cmd}
	_ret=$?

	[ ${_ret} -ne 0 ] && log_err 1 "${N1_COLOR}${CIX_APP}: volume create failed: ${N2_COLOR}${_cmd}${N0_COLOR}"

	${ECHO} "${N1_COLOR}${CIX_APP}: main volume created: ${N2_COLOR}${ZPOOL}/${VOLUMES} -> ${workdir}/VOLUMES${N0_COLOR}"
	return 0
}

volume_create_env()
{
	local _ret= _cmd=
	local _res=

	if [ -z "${jname}" ]; then
		err 1 "${N1_COLOR}${CIX_APP} error, empty: ${N2_COLOR}jname=${N0_COLOR}"
	fi

	[ -d "${workdir}/VOLUMES/${jname}-data" ] && return 0

	if [ ! -d "${workdir}/VOLUMES" ]; then
		err 1 "${N1_COLOR}${CIX_APP} error, no such: ${N2_COLOR}${workdir}/VOLUMES${N0_COLOR}"
	fi

	if [ ${zfsfeat} -eq 0 ]; then
		if [ -d "${workdir}/VOLUMES/${jname}-data" ]; then
			${MKDIR_CMD} "${workdir}/VOLUMES/${jname}-data"
			${ECHO} "${N1_COLOR}${CIX_APP}: volume created: ${N2_COLOR}${workdir}/VOLUMES/${jname}-data{N0_COLOR}"
			return 0
		fi
	fi

	. ${subrdir}/zfs.subr

	zfsmnt "${workdir}/VOLUMES"

	# basename
	_res="${ZPOOL##*/}"

	if [ "${_res}" = "VOLUMES" ]; then
		readconf zfs.conf
		_cmd="${ZFS_CMD} create ${zfs_create_flags} -o mountpoint=${workdir}/VOLUMES/${jname}-data ${ZPOOL}/${jname}-volume"
		${_cmd}
		_ret=$?
		[ ${_ret} -ne 0 ] && log_err 1 "${N1_COLOR}${CIX_APP}: volume create failed: ${N2_COLOR}${_cmd}${N0_COLOR}"
		${ECHO} "${N1_COLOR}${CIX_APP}: main volume created: ${N2_COLOR}${ZPOOL}/${jname}-volume -> ${workdir}/VOLUMES/${jname}-data${N0_COLOR}"
	else
		${ECHO} "${N1_COLOR}${CIX_APP}not zvol: ${workdir}/VOLUMES, force to mkdir"
		${MKDIR_CMD} "${workdir}/VOLUMES/${jname}-data"
		${ECHO} "${N1_COLOR}${CIX_APP}: volume created: ${N2_COLOR}${workdir}/VOLUMES/${jname}-data{N0_COLOR}"
	fi

	return 0
}

volume_create()
{
	[ ! -d "${workdir}/VOLUMES" ] && volume_create_main
	[ -n "${jname}" ] && volume_create_env
}

case "${mode}" in
	create)
		volume_create
		;;
	destroy)
		volume_destroy
		;;
esac

_ret=$?

exit ${_ret}
