#!/usr/local/bin/cbsd
#v10.1.0
MYDESC="console dialog for jail creation"
MYARG=""
MYOPTARG=""
EXTHELP="wf_jcreate.html"

. ${subr}
. ${settingstui}
. ${tools}

init $*

# $jname
get_jname()
{
	freejname=$( freejname default_jailname=${default_jailname} )
	local _default _input

	_default="${freejname}"
	_input=""
	while [ x${_input} = x ]; do
		$ECHO "${BOLD}${jname_msg} e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
		if validate_jname ${_input}; then
			_input=""
		fi

		jstatus jname=${_input}
		if [ $? -ne 0 ]; then
			${ECHO} "${MAGENTA}ERROR: Jail ${GREEN}${_input}${MAGENTA} already exist. Try again${NORMAL}"
			_input=""
		fi
	done

	export jname=${_input}
	merge_apply_profiles ${etcdir}/defaults/${zero_profile} ${global_profile_file}
}

# $host_hostname
get_jail_host_hostname()
{
	local _default _input _defdomain

	if [ -n "${default_domain}" ]; then
		_defdomain="${default_domain}"
	else
		_defdomain="my.domain"
	fi

	_default="${jname}.${_defdomain}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${host_hostname_msg} e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done
	export host_hostname=${_input}
}



# $ips
get_jail_ips()
{
	local _input _default
	_default=$( dhcpd 2>/dev/null )
	[ $? -eq 2 ] && err 1 "${MAGENTA}No free IP address for DHCP in nodeippool${NORMAL}"
	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${ip4_addr_msg} e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done
	export ip4_addr="${_input}"
}

# $interface
get_jail_interface()
{
	local _default _input

	_default="${interface}"

	while [ x${_input} = x ]; do
		$ECHO "${BOLD}${interface_msg} e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export interface=${_input}
}

# $ver
get_jail_ver()
{
	local _input _default

	_default="${ver}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${ver_msg} e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export ver=${_input}
}

# $base
get_jail_arch()
{
	local _default _input

	_default="${arch}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${arch_msg} e.g: ${GREEN}${arch}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export arch=${_input}
}


# $baserw
get_jail_baserw()
{
	local _default _input

	_default="${baserw}"

	while [ x${_input} = x ]; do
		$ECHO "${BOLD}${baserw_msg} ( 0 - nullfs base mount in RO, 1 - no nullfs, RW ) e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export baserw=${_input}
}

# $mount_src
get_jail_mount_src()
{
	local _default _input

	_default="${mount_src}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${mount_src_msg} (0 - no, 1 - yes): e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export mount_src=${_input}
}

# $mount_obj
get_jail_mount_obj()
{
	local _default _input

	_default="${mount_obj}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${mount_obj_msg} ( 0 - no, 1 - yes) e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export mount_obj=${_input}
}

# $mount_ports
get_jail_mount_ports()
{
	local _default _input

	_default="${mount_ports}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${mount_ports_msg} ( 0 - no, 1 - yes) e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export mount_ports=${_input}
}


# $applytpl
get_jail_applytpl()
{
	local _default _input

	_default="${applytpl}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${applytpl_msg} ( 0 - no, 1 - yes) e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export applytpl=${_input}
}

# $applytpl
get_jail_floatresolv()
{
	local _default _input

	_default="${floatresolv}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${floatresolv_msg} ( 0 - no, 1 - yes) e.g: ${GREEN}${_default}${NORMAL}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export floatresolv=${_input}
}


# $astart
get_jail_astart()
{
	local _default _input

	_default="${astart}"

	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${astart_msg} ( 0 - no, 1 -yes) e.g: ${GREEN}${_default}${NORMAL} "
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export astart=${_input}
}



gen_newjail_conf()
{
	local _i _mytest _ret

	pkglist=""
	vnet="0"
	mdsize="0"

	# vnet=${vimage}

	# init emulator by arch
	init_target_arch
	gen_jconf
	[ $? -eq 0 ] || err 1 "${MAGENTA}Bad conf${NORMAL}"
}

more << EOF_HEADER
---------[${product} v.${myversion}]---------
Welcome to jcreate config constructor script.

For DIALOG-based menu please use jconstruct-tui utility
-----------------------
EOF_HEADER

agreed=
while [ x$agreed = x ]; do
	${ECHO} "${BOLD}Proceed to construct? ${GREEN}[yes or no]${NORMAL}"
	read reply leftover
	case $reply in
		y* | Y*)
			agreed=1
			;;
		n* | n*)
			echo
			exit 1
			;;
	esac
done

. ${buildconf}

zero_profile="jail-freebsd-default.conf"
readconf ${zero_profile}
# re-read profile for init global_profile_file variable
get_construct_profile ${default_profile}
[ -z "${profile}" -a -n "${jail_profile}" ] && profile="${jail_profile}"

. ${workdir}/universe.subr

get_jname &&  \
get_jail_host_hostname && \
get_jail_ips && \
get_jail_ver && \
get_jail_arch && \
get_jail_baserw && \
get_jail_mount_src && \
get_jail_mount_ports && \
get_jail_astart && \
get_jail_interface && \
get_jail_applytpl && \
get_jail_floatresolv && \
gen_newjail_conf
