#!/usr/local/bin/cbsd

. ${subrdir}/nc.subr
. ${strings}
. ${tools}
. ${nodes}
. ${subrdir}/build.subr		# for ver variable

dialog_menu_main()
{
	local title="$DIALOG_TITLE"
	local btitle="$DIALOG_BACKTITLE"
	local prompt=""
	local menu_list=
	local defaultitem=
	local hline="Hit ENTER for SELECT"
	local prompt="'ver:XXX' flags means that the images required XXX base"
	local kversion
	local retval

	local f_dialog_title=" CBSD FreeBSD Images Repository "

	defaultitem="${menu_choice}"

	for i in $( ${SEQ_CMD} 1 255 ); do
		images_name=
		images_arch=
		images_ver=
		images_desc=
		images_special=
		desc=
		eval images_name="\$images${i}_name"
		[ -z "${images_name}" ] && break
		eval mark=\$selected_images${i}

		eval images_arch="\$images${i}_arch"
		eval images_ver="\$images${i}_ver"
		eval images_desc="\$images${i}_desc"
		eval images_special="\$images${i}_special"
		descr="ver:${images_ver},arch:${images_arch}"
		[ "${images_special}" = "0" ] && images_special=
		[ -z "${images_desc}" ] && images_desc="no description"
		[ -z "${mark}" ] && mark=" "

		if [ -n "${images_special}" ]; then
			descr="${descr}, ${images_special}"
		fi
		if [ "${images_ver}" = "${ver}" ]; then
			descr="${descr} [*]"
			images_desc="${images_desc}, native version"
		fi
		menu_list="${menu_list} '${i}	${images_name}'	'[${mark}] ${descr}'	'${images_desc}'"
	done

	menu_list="${menu_list} '-'		''	''"
	menu_list="${menu_list} 'Download'	''	''"

	cbsd_menubox
	retval=$?

	f_dialog_data_sanitize menu_choice
	f_dialog_menutag_store "${menu_choice}"

	# Only update default-item on success
	[ ${retval} -eq ${DIALOG_OK} ] && f_dialog_default_store "${menu_choice}"

	return ${DIALOG_OK}
}


download_images()
{
	local _fetch_images=
	local mark
	local i
	local _res
	local _imgname _imgver

	for i in $( ${SEQ_CMD} 1 255 ); do
		eval images_name="\$images${i}_name"
		eval images_ver="\$images${i}_ver"

		[ -z "${images_name}" ] && break
		eval mark=\$selected_images${i}
		[ "${mark}" = "X" ] && _fetch_images="${_fetch_images} ${images_name}:${images_ver}"
	done

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

	for i in ${_fetch_images}; do
			_imgname=${i%%:*}
			_imgver=${i##*:}
		echo
		echo "exec: cbsd repo action=get sources=img name=${_imgname} ver=${_imgver} usehelpers=1"

		# return stdout
		exec 3>&-
		export DIALOG="${DIALOG}"
		repo action=get sources=img name=${_imgname} useconfig=0 ver=${_imgver} usehelpers=1
		eval exec $TERMINAL_STDOUT_PASSTHRU\>\&1
		eval exec $TERMINAL_STDERR_PASSTHRU\>\&2

		#if [ -f "${jailsysdir}/${_imgname}/bin/bootstrap.sh" ]; then
		#	imghelper bootstrap=${jailsysdir}/${_imgname}/bin/bootstrap.sh jname=${_imgname}
		#	sleep 5
		#else
		#	${ECHO} "${N1_COLOR}No such bootstrap file: ${N2_COLOR}${jailsysdir}/${_imgname}/bin/bootstrap.sh${N1_COLOR}, skip.${N0_COLOR}"
		#	sleep 5
		#fi
	done

	echo "Press a key"
	read p
}


############################################################ MAIN
export NOCOLOR=1

. ${dialog}

. ${subrdir}/bsdconfig.subr
f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages-repo.subr

# Incorporate rc-file if it exists
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"

#
# Process command-line arguments
#
while getopts h$GETOPTS_STDARGS flag; do
	case "$flag" in
	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
	esac
done
shift $(( $OPTIND - 1 ))

#
# Initialize
#
f_dialog_title " $msg_repo_images "
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
f_mustberoot_init

imageslist=$( ${MKTEMP_CMD} )
f_dialog_info "Obtain index files from ${repo}. Please wait..."
trap "${RM_CMD} -f ${imageslist}" HUP INT ABRT BUS TERM EXIT
res=$( 2>/dev/null repo quiet=1 action=list sources=img ver=any > ${imageslist} )

i=1

OIFS="${IFS}"
IFS="|"

# rtorrent|amd64|13|rtorrent UI|c956bb4ea25283bb86dcedd681030985|1155717120|0
eval $( ${CAT_CMD} ${imageslist} | while read _name _arch _ver _desc _crc _size _special; do
	echo "images${i}_name=\"${_name}\""
	echo "images${i}_arch=\"${_arch}\""
	echo "images${i}_ver=\"${_ver}\""
	echo "images${i}_desc=\"${_desc}\""
	echo "images${i}_crc=\"${_crc}\""
	echo "images${i}_size=\"${_size}\""
	echo "images${i}_special=\"${_special}\""
	i=$(( i + 1 ))
	OIFS="${IFS}"
	IFS="|"
done )

IFS="${OIFS}"

#
# Loop over the main menu until we've accomplished what we came here to do
#
while :; do
	dialog_menu_main || break
	f_dialog_menutag_fetch mtag

	[ -z "${mtag}" ] && exit $SUCCESS

	command=

	case "$mtag" in
		?" $msg_exit") break ;;
		"Download")
				download_images
				exit 0
				;;
		"-")
				continue
				;;
		*)
			index=${mtag%% *}
			images=${mtag##* }
			eval mark=\$selected_images${index}
			if [ "${mark}" = "X" ];then
				eval "selected_images${index}=\" \""
			else
				eval "selected_images${index}=\"X\""
			fi
			continue
			;;
	esac

	if [ "$command" ]; then
		$BSDCFG_LIBE/$APP_DIR/$command ${USE_XDIALOG:+-X}
	fi

done

return $SUCCESS

################################################################################
# END
################################################################################
