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

. ${subrdir}/nc.subr
. ${cbsdinit}
. ${subrdir}/settings-tui.subr
. ${subrdir}/settings-tui-jail.subr

# $jname
get_jname()
{
	# freejname_script must be declared in the config file.
	# however, just in case:
	[ -z "${freejname_script}" ] && freejname_script="freejname"

	if [ "${freejname_script}" != "freejname" ]; then
		[ ! -x "${freejname_script}" ] && err 1 "${N1_COLOR}${CBSD_APP}: custom freejname script not found or not executable: ${N2_COLOR}${freejname_script}${N0_COLOR}"
	fi
	freejname=$( ${freejname_script} default_jailname=${default_jailname} )

	local _default _input

	_default="${freejname}"
	_input=""
	while [ x${_input} = x ]; do
		$ECHO "${BOLD}${jname_msg} e.g: ${N2_COLOR}${_default}${N0_COLOR}"
		read _input
		[ -z "${_input}" ] && _input="${_default}"
		validate_jname "${_input}" || _input=""

		jstatus jname=${_input}
		if [ $? -ne 0 ]; then
			${ECHO} "${N1_COLOR}ERROR: Jail ${N2_COLOR}${_input}${N1_COLOR} already exist. Try again${N0_COLOR}"
			_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: ${N2_COLOR}${_default}${N0_COLOR}"
		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 "${N1_COLOR}No free IP address for DHCP in nodeippool${N0_COLOR}"
	while [ x${_input} = x ]; do
		${ECHO} "${BOLD}${ip4_addr_msg} e.g: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${arch}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR}"
		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: ${N2_COLOR}${_default}${N0_COLOR} "
		read _input
		[ -z "${_input}" ] && _input="${_default}"
	done

	export astart=${_input}
}

# $vnet
get_jail_vnet()
{
	local _default _input

	[ -z "${vnet}" ] && export vnet=0

	[ "${vimage_feature}" != "1" ] && return 0

	_default="${vnet}"

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

	export vnet=${_input}
}



gen_newjail_conf()
{
	local _i _mytest _ret

	pkglist=
	mdsize="0"

	# vnet=${vimage}

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

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? ${N2_COLOR}[yes or no]${N0_COLOR}"
	read reply leftover
	case $reply in
		y* | Y*)
			agreed=1
			;;
		n* | n*)
			echo
			exit 1
			;;
	esac
done

. ${subrdir}/build.subr

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}"

. ${subrdir}/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_vnet && \
get_jail_interface && \
get_jail_applytpl && \
get_jail_floatresolv && \
gen_newjail_conf

exit 0
