#!/bin/sh

set -e

# FIXME: this whole mess should be simplified at some point

. /usr/share/debconf/confmodule

Distribution ()
{
	db_get linux-container/distribution
	_DISTRIBUTION="${RET}" # select

	if [ -z "${_DISTRIBUTION}" ]
	then
		case "${_MODE}" in
			debian)
				db_subst linux-container/distribution CHOICES "Debian GNU/Linux 6.0 \"squeeze\", Debian GNU/Linux 7.0 \"wheezy\", Debian GNU/Linux unstable/sid"
				db_subst linux-container/distribution CHOICES_C "squeeze, wheezy, sid"

				db_set linux-container/distribution squeeze
				db_fset linux-container/distribution seen false
				;;

			progress)
				db_subst linux-container/distribution CHOICES "Progress Linux 1.0 (artax), Progress Linux 1.9 (artax-backports), Progress Linux 2.0 (baureo)"
				db_subst linux-container/distribution CHOICES_C "artax, artax-backports, baureo"

				db_set linux-container/distribution artax
				db_fset linux-container/distribution seen false
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/distribution || true
		db_go

		db_get linux-container/distribution
		_DISTRIBUTION="${RET}" # select
	fi

	echo "_DISTRIBUTION=\"${_DISTRIBUTION}\"" >> "${_TMPDIR}/debconf.default"
	export _DISTRIBUTION
}

Parent_distribution ()
{
	db_get linux-container/parent-distribution
	_PARENT_DISTRIBUTION="${RET}"

	if [ -z "${_PARENT_DISTRIBUTION}" ]
	then
		case "${_MODE}" in
			progress)
				case "${_DISTRIBUTION}" in
					artax*)
						_PARENT_DISTRIBUTION="squeeze"
						;;

					baureo*)
						_PARENT_DISTRIBUTION="sid"
						;;
				esac
				;;

			*)
				_PARENT_DISTRIBUTION="${_DISTRIBUTION}"
				;;
		esac
	fi

	echo "_PARENT_DISTRIBUTION=\"${_PARENT_DISTRIBUTION}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_DISTRIBUTION
}

Architecture ()
{
	_CHOICES="${1}"
	_CHOICES_C="${2}"
	_DEFAULT="${3}"

	db_get linux-container/architecture
	_ARCHITECTURE="${RET}" # select

	if [ -z "${_ARCHITECTURE}" ]
	then
		db_subst linux-container/architecture CHOICES ${_CHOICES}
		db_subst linux-container/architecture CHOICES_C ${_CHOICES_C}

		db_set linux-container/architecture ${_DEFAULT}
		db_fset linux-container/distribution seen false

		db_settitle linux-container/title
		db_input high linux-container/architecture || true
		db_go

		db_get linux-container/architecture
		_ARCHITECTURE="${RET}" # select
	fi

	echo "_ARCHITECTURE=\"${_ARCHITECTURE}\"" >> "${_TMPDIR}/debconf.default"
	export _ARCHITECTURE
}

Archives ()
{
	db_get linux-container/archives
	_ARCHIVES="${RET}" # multiselect

	if [ -z "${_ARCHIVES}" ]
	then
		case "${_MODE}" in
			debian)
				db_subst linux-container/archives CHOICES "Debian Security, Debian Updates, Debian Backports, Debian Proposed Updates"
				db_subst linux-container/archives CHOICES_C "${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports, ${_DISTRIBUTION}-proposed-updates"

				db_set linux-container/archives "${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports"
				db_fset linux-container/archives seen false
				;;

			progress)
				db_subst linux-container/archives CHOICES "Progress (staging), Progress Security, Progress Security (staging), Progress Updates, Progress Updates (staging), Progress Backports, Progress Backports (staging)"
				db_subst linux-container/archives CHOICES_C "${_DISTRIBUTION}-staging, ${_DISTRIBUTION}-security, ${_DISTRIBUTION}-security-staging, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-updates-staging, ${_DISTRIBUTION}-backports, ${_DISTRIBUTION}-backports-staging"

				db_set linux-container/archives "${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports"
				db_fset linux-container/archives seen false
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/archives || true
		db_go

		db_get linux-container/archives
		_ARCHIVES="${RET}" # multiselect
	fi

	_ARCHIVES="$(echo ${_ARCHIVES} | sed -e 's|, | |g')"

	echo "_ARCHIVES=\"${_ARCHIVES}\"" >> "${_TMPDIR}/debconf.default"
	export _ARCHIVES
}

Parent_archives ()
{
	db_get linux-container/parent-archives
	_PARENT_ARCHIVES="${RET}" # multiselect (w/o empty)

	if [ -z "${_PARENT_ARCHIVES}" ]
	then
		case "${_MODE}" in
			progress)
				db_subst linux-container/parent-archives CHOICES "Debian Security, Debian Updates , Debian Backports, Debian Proposed Updates"
				db_subst linux-container/parent-archives CHOICES_C "${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports, ${_DISTRIBUTION}-proposed-updates"

				db_set linux-container/parent-archives "${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports"
				db_fset linux-container/parent-archives seen false

				db_settitle linux-container/title
				db_input high linux-container/parent-archives || true
				db_go
				;;

			*)
				db_subst linux-container/parent-archives CHOICES "Debian Security, Debian Updates , Debian Backports, Debian Proposed Updates"
				db_subst linux-container/parent-archives CHOICES_C "${_ARCHIVES}"

				db_set linux-container/parent-archives "${_ARCHIVES}"
				db_fset linux-container/parent-archives seen true
				;;
		esac

		db_get linux-container/parent-archives
		_PARENT_ARCHIVES="${RET}" # multiselect (w/o empty)

		if [ -z "${_PARENT_ARCHIVES}" ]
		then
			case "${_MODE}" in
				progress)
					_PARENT_ARCHIVES="${_DISTRIBUTION}-security, ${_DISTRIBUTION}-updates, ${_DISTRIBUTION}-backports"
					;;

				*)
					_PARENT_ARCHIVES="${_ARCHIVES}"
					;;
			esac
		fi
	fi

	_PARENT_ARCHIVES="$(echo ${_PARENT_ARCHIVES} | sed -e 's|, | |g')"

	echo "_PARENT_ARCHIVES=\"${_PARENT_ARCHIVES}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_ARCHIVES
}

Mirror ()
{
	db_get linux-container/mirror
	_MIRROR="${RET}"

	if [ -z "${_MIRROR}" ]
	then
		case "${_MODE}" in
			debian)
				db_set linux-container/mirror http://ftp.debian.org/debian/
				db_fset linux-container/mirror seen false
				;;

			progress)
				db_set linux-container/mirror http://cdn.archive.progress-linux.org/progress/
				db_fset linux-container/mirror seen false
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/mirror || true
		db_go

		db_get linux-container/mirror
		_MIRROR="${RET}" # string (w/o empty)

		if [ -z "${_MIRROR}" ]
		then
			case "${_MODE}" in
				debian)
					_MIRROR="http://ftp.debian.org/debian/"
					;;

				progress)
					_MIRROR="http://cdn.archive.progress-linux.org/progress/"
					;;
			esac
		fi
	fi

	echo "_MIRROR=\"${_MIRROR}\"" >> "${_TMPDIR}/debconf.default"
	export _MIRROR
}

Mirror_security ()
{
	db_get linux-container/mirror-security
	_MIRROR_SECURITY="${RET}" # string (w/o empty)

	if [ -z "${_MIRROR_SECURITY}" ]
	then
		case "${_MODE}" in
			debian)
				db_set linux-container/mirror-security http://security.debian.org/
				db_fset linux-container/mirror-security seen false
				;;

			*)
				db_set linux-container/mirror-security ${_MIRROR}
				db_fset linux-container/mirror-security seen true
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/mirror-security || true
		db_go

		db_get linux-container/mirror-security
		_MIRROR_SECURITY="${RET}" # string (w/o empty)

		if [ -z "${_MIRROR_SECURITY}" ]
		then
			case "${_MODE}" in
				debian)
					_MIRROR_SECURITY="http://security.debian.org/"
					;;

				*)
					_MIRROR_SECURITY="${_MIRROR}"
					;;
			esac
		fi
	fi

	echo "_MIRROR_SECURITY=\"${_MIRROR_SECURITY}\"" >> "${_TMPDIR}/debconf.default"
	export _MIRROR_SECURITY
}

Mirror_backports ()
{
	db_get linux-container/mirror-backports
	_MIRROR_BACKPORTS="${RET}" # string (w/o empty)

	if [ -z "${_MIRROR_BACKPORTS}" ]
	then
		case "${_MODE}" in
			debian)
				db_set linux-container/mirror-backports http://backports.debian.org/debian-backports/
				db_fset linux-container/mirror-backports seen false
				;;

			*)
				db_set linux-container/mirror-backports ${_MIRROR}
				db_fset linux-container/mirror-backports seen true
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/mirror-backports || true
		db_go

		db_get linux-container/mirror-backports
		_MIRROR_BACKPORTS="${RET}" # string (w/o empty)

		if [ -z "${_MIRROR_BACKPORTS}" ]
		then
			case "${_MODE}" in
				debian)
					_MIRROR_BACKPORTS="http://backports.debian.org/debian-backports/"
					;;

				*)
					_MIRROR_BACKPORTS="${_MIRROR}"
					;;
			esac
		fi
	fi

	echo "_MIRROR_BACKPORTS=\"${_MIRROR_BACKPORTS}\"" >> "${_TMPDIR}/debconf.default"
	export _MIRROR_BACKPORTS
}

Parent_mirror ()
{
	db_get linux-container/parent-mirror
	_PARENT_MIRROR="${RET}" # string (w/o empty)

	if [ -z "${_PARENT_MIRROR}" ]
	then
		case "${_MODE}" in
			progress)
				db_set linux-container/parent-mirror http://ftp.debian.org/debian/
				db_fset linux-container/parent-mirror seen false

				db_settitle linux-container/title
				db_input high linux-container/parent-mirror || true
				db_go
				;;

			*)
				db_set linux-container/parent-mirror ${_MIRROR}
				db_fset linux-container/parent-mirror seen true
				;;
		esac

		db_get linux-container/parent-mirror
		_PARENT_MIRROR="${RET}" # string (w/o empty)

		if [ -z "${_PARENT_MIRROR}" ]
		then
			case "${_MODE}" in
				progress)
					_PARENT_MIRROR="http://ftp.debian.org/debian/"
					;;

				*)
					_PARENT_MIRROR="${_MIRROR}"
					;;
			esac
		fi
	fi

	echo "_PARENT_MIRROR=\"${_PARENT_MIRROR}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_MIRROR
}

Parent_mirror_security ()
{
	db_get linux-container/parent-mirror-security
	_PARENT_MIRROR_SECURITY="${RET}" # string (w/o empty)

	if [ -z "${_PARENT_MIRROR_SECURITY}" ]
	then
		case "${_MODE}" in
			progress)
				db_set linux-container/parent-mirror-security http://security.debian.org/
				db_fset linux-container/parent-mirror-security seen false

				db_settitle linux-container/title
				db_input high linux-container/parent-mirror-security || true
				db_go
				;;

			*)
				db_set linux-container/parent-mirror-security ${_MIRROR_SECURITY}
				db_fset linux-container/parent-mirror-security seen true
				;;
		esac

		db_get linux-container/parent-mirror-security
		_PARENT_MIRROR_SECURITY="${RET}" # string (w/o empty)

		if [ -z "${_PARENT_MIRROR_SECURITY}" ]
		then
			case "${_MODE}" in
				progress)
					_PARENT_MIRROR_SECURITY="http://security.debian.org/"
					;;

				*)
					_PARENT_MIRROR_SECURITY="${_MIRROR_SECURITY}"
					;;
			esac
		fi
	fi

	echo "_PARENT_MIRROR_SECURITY=\"${_PARENT_MIRROR_SECURITY}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_MIRROR_SECURITY
}

Parent_mirror_backports ()
{
	db_get linux-container/parent-mirror-backports
	_PARENT_MIRROR_BACKPORTS="${RET}" # string (w/o empty)

	if [ -z "${_PARENT_MIRROR_BACKPORTS}" ]
	then
		case "${_MODE}" in
			progress)
				db_set linux-container/parent-mirror-backports http://backports.debian.org/debian-backports/
				db_fset linux-container/parent-mirror-backports seen false

				db_settitle linux-container/title
				db_input high linux-container/parent-mirror-backports || true
				db_go
				;;

			*)
				db_set linux-container/parent-mirror-backports ${_MIRROR_BACKPORTS}
				db_fset linux-container/parent-mirror-backports seen true
				;;
		esac

		db_get linux-container/parent-mirror-backports
		_PARENT_MIRROR_BACKPORTS="${RET}" # string (w/o empty)

		if [ -z "${_PARENT_MIRROR_BACKPORTS}" ]
		then
			case "${_MODE}" in
				progress)
					_PARENT_MIRROR_BACKPORTS="http://backports.debian.org/debian-backports/"
					;;

				*)
					_PARENT_MIRROR_BACKPORTS="${_MIRROR_BACKPORTS}"
					;;
			esac
		fi
	fi

	echo "_PARENT_MIRROR_BACKPORTS=\"${_PARENT_MIRROR_BACKPORTS}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_MIRROR_BACKPORTS
}

Archive_areas ()
{
	db_get linux-container/archive-areas
	_ARCHIVE_AREAS="${RET}"

	if [ -z "${_ARCHIVE_AREAS}" ]
	then
		case "${_MODE}" in
			progress)
				db_subst linux-container/archive-areas CHOICES "main, contrib, non-free"

				db_set linux-container/archive-areas "main, contrib, non-free"
				db_fset linux-container/archive-areas seen false
				;;

			*)
				db_subst linux-container/archive-areas CHOICES "main, contrib, non-free"

				db_set linux-container/archive-areas "main"
				db_fset linux-container/archive-areas seen false
				;;
		esac

		db_settitle linux-container/title
		db_input high linux-container/archive-areas || true
		db_go

		db_get linux-container/archive-areas
		_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty)

		if [ -z "${_ARCHIVE_AREAS}" ]
		then
			case "${_MODE}" in
				debian)
					_ARCHIVE_AREAS="main"
					;;

				progress)
					_ARCHIVE_AREAS="main, contrib, non-free"
					;;
			esac
		fi
	fi

	_ARCHIVE_AREAS="$(echo ${_ARCHIVE_AREAS} | sed -e 's| ||g')"

	echo "_ARCHIVE_AREAS=\"${_ARCHIVE_AREAS}\"" >> "${_TMPDIR}/debconf.default"
	export _ARCHIVE_AREAS
}

Parent_archive_areas ()
{
	db_get linux-container/parent-archive-areas
	_PARENT_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty)

	if [ -z "${_PARENT_ARCHIVE_AREAS}" ]
	then
		case "${_MODE}" in
			progress)
				db_subst linux-container/parent-archive-areas CHOICES "main, contrib, non-free"

				db_set linux-container/parent-archive-areas "main, contrib, non-free"
				db_fset linux-container/parent-archive-areas seen false

				db_settitle linux-container/title
				db_input high linux-container/parent-archive-areas || true
				db_go
				;;

			*)
				db_subst linux-container/parent-archive-areas CHOICES "${_ARCHIVE_AREAS}"

				db_set linux-container/parent-archive-areas "${_ARCHIVE_AREAS}"
				db_fset linux-container/parent-archive-areas seen true
				;;
		esac

		db_get linux-container/parent-archive-areas
		_PARENT_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty)

		if [ -z "${_PARENT_ARCHIVE_AREAS}" ]
		then
			case "${_MODE}" in
				progress)
					_PARENT_ARCHIVE_AREAS="main, contrib, non-free"
					;;

				*)
					_PARENT_ARCHIVE_AREAS="${_ARCHIVE_AREAS}"
					;;
			esac
		fi
	fi

	_PARENT_ARCHIVE_AREAS="$(echo ${_PARENT_ARCHIVE_AREAS} | sed -e 's| ||g')"

	echo "_PARENT_ARCHIVE_AREAS=\"${_PARENT_ARCHIVE_AREAS}\"" >> "${_TMPDIR}/debconf.default"
	export _PARENT_ARCHIVE_AREAS
}

Packages ()
{
	db_get linux-container/packages
	_PACKAGES="${RET}" # string (w/ empty)

	if [ -z "${_PACKAGES}" ]
	then
		db_settitle linux-container/title
		db_input high linux-container/packages || true
		db_go

		db_get linux-container/packages
		_PACKAGES="${RET}" # string (w/ empty)
	fi

	echo "_PACKAGES=\"${_PACKAGES}\"" >> "${_TMPDIR}/debconf.default"
	export _PACKAGES
}

Local_repositories ()
{
	_NUMBER="0"

	while db_get linux-container/local${_NUMBER}/repository && [ "${RET}" ]
	do
		mkdir -p "${_TMPDIR}/sources.list.d"

		_REPOSITORY="${RET#deb }"

		_LIST="local${_NUMBER}.list"
		if db_get linux-container/local${_NUMBER}/list
		then
			_LIST="$(basename ${RET} .list).list"
		fi

		_COMMENT=""
		if db_get linux-container/local${_NUMBER}/comment
		then
			_COMMENT="${RET}"

			echo "# ${_COMMENT}" > "${_TMPDIR}/sources.list.d/${_LIST}"
		fi

		echo "deb ${_REPOSITORY}" >> "${_TMPDIR}/sources.list.d/${_LIST}"

		if db_get linux-container/local${_NUMBER}/source && [ "$RET" = true ]
		then
			echo "deb-src ${_REPOSITORY}" >> "${_TMPDIR}/sources.list.d/${_LIST}"
		fi

		_KEY=""
		if db_get linux-container/local${_NUMBER}/key
		then
			_KEY="${RET}"

			wget -q "${_KEY}" -O "${_TMPDIR}/sources.list.d/$(basename ${_LIST} .list).key"
		fi

		_NUMBER="$((${_NUMBER} + 1))"
	done
}

Root_password ()
{
	if db_get passwd/root-password
	then
		_ROOT_PASSWORD="${RET}" # string (w/o empty)
	fi

	if [ -z "${_ROOT_PASSWORD}" ]
	then
		# Create a random password as suggestion for the user
		_RANDOM_PASSWORD="$(dd if=/dev/urandom bs=6 count=1 2> /dev/null | base64)"

		db_set passwd/root-password ${_RANDOM_PASSWORD}
		db_fset passwd/root-password seen false

		db_settitle linux-container/title
		db_input high passwd/root-password || true
		db_go

		db_get passwd/root-password
		_ROOT_PASSWORD="${RET}"

		if [ -z "${_ROOT_PASSWORD}" ]
		then
			# User did set not set a password, falling back to random password
			_ROOT_PASSWORD="${_RANDOM_PASSWORD}"

			echo "_ROOT_RANDOM_PASSWORD=\"true\"" >> "${_TMPDIR}/debconf.default"
		fi
	fi

	echo "_ROOT_PASSWORD=\"${_ROOT_PASSWORD}\"" >> "${_TMPDIR}/debconf.default"
}

Network ()
{
	_NUMBER="0"

	while db_get linux-container/eth${_NUMBER}/dhcp && [ "${RET}" ]
	do
		if db_get linux-container/eth${_NUMBER}/comment
		then
			eval LINUX_CONTAINER_ETH${_NUMBER}_COMMENT="\"${RET}\"" # string (w/)
		fi

		if db_get linux-container/eth${_NUMBER}/bridge
		then
			eval LINUX_CONTAINER_ETH${_NUMBER}_BRIDGE="\"${RET}\"" # string (w/o empty)
		fi

		if db_get linux-container/eth${_NUMBER}/mac
		then
			eval LINUX_CONTAINER_ETH${_NUMBER}_MAC="\"${RET}\"" # string (w/o empty)
		fi

		if db_get linux-container/eth${_NUMBER}/mtu
		then
			eval LINUX_CONTAINER_ETH${_NUMBER}_MTU="\"${RET}\"" # string (w/ empty)
		fi

		if db_get linux-container/eth${_NUMBER}/veth
		then
			eval LINUX_CONTAINER_ETH${_NUMBER}_VETH="\"${RET}\"" # string (w/ empty)
		fi

		_NUMBER="$((${_NUMBER} + 1))"
	done

	# FIXME: this is ugly
	if [ "${_NUMBER}" -gt 0 ]
	then
		LINUX_CONTAINER_ETH_NUMBER="$((${_NUMBER} - 1))"
	else
		LINUX_CONTAINER_ETH_NUMBER="${_NUMBER}"
	fi

	if [ -z ${LINUX_CONTAINER_ETH0_BRIDGE} ]
	then
		# FIXME: do guess the default bridge device
		db_set linux-container/eth0/bridge br0
		db_fset linux-container/eth0/bridge seen false

		db_settitle linux-container/title
		db_input high linux-container/eth0/bridge || true
		db_go

		db_get linux-container/eth0/bridge
		LINUX_CONTAINER_ETH0_BRIDGE="${RET:-br0}"
	fi

	if [ -z "${LINUX_CONTAINER_ETH0_MAC}" ]
	then
		# FIXME: do guess the default mac address
		db_set linux-container/eth0/mac 00:FF:00:00:00:01
		db_fset linux-container/eth0/mac seen false

		db_settitle linux-container/title
		db_input high linux-container/eth0/mac || true
		db_go

		db_get linux-container/eth0/mac
		LINUX_CONTAINER_ETH0_MAC="${RET:-00:FF:00:00:00:01}"
	fi

	echo "LINUX_CONTAINER_ETH_NUMBER=\"${LINUX_CONTAINER_ETH_NUMBER}\"" >> "${_TMPDIR}/debconf.default"

	for _NUMBER in $(seq 0 ${LINUX_CONTAINER_ETH_NUMBER})
	do
		eval _COMMENT="$`echo LINUX_CONTAINER_ETH${_NUMBER}_COMMENT`"
		echo "LINUX_CONTAINER_ETH${_NUMBER}_COMMENT=\"${_COMMENT}\"" >> "${_TMPDIR}/debconf.default"

		eval _BRIDGE="$`echo LINUX_CONTAINER_ETH${_NUMBER}_BRIDGE`"
		echo "LINUX_CONTAINER_ETH${_NUMBER}_BRIDGE=\"${_BRIDGE}\"" >> "${_TMPDIR}/debconf.default"

		eval _MAC="$`echo LINUX_CONTAINER_ETH${_NUMBER}_MAC`"
		echo "LINUX_CONTAINER_ETH${_NUMBER}_MAC=\"${_MAC}\"" >> "${_TMPDIR}/debconf.default"

		eval _MTU="$`echo LINUX_CONTAINER_ETH${_NUMBER}_MTU`"
		echo "LINUX_CONTAINER_ETH${_NUMBER}_MTU=\"${_MTU}\"" >> "${_TMPDIR}/debconf.default"

		eval _VETH="$`echo LINUX_CONTAINER_ETH${_NUMBER}_VETH`"
		echo "LINUX_CONTAINER_ETH${_NUMBER}_VETH=\"${_VETH}\"" >> "${_TMPDIR}/debconf.default"
	done
}

Auto ()
{
	db_get linux-container/auto
	_AUTO="${RET}" # boolean

	if [ -z "${_AUTO}" ]
	then
		db_set linux-container/auto false
		db_fset linux-container/auto seen false

		db_settitle linux-container/title
		db_input high linux-container/auto || true
		db_go

		db_get linux-container/auto
		_AUTO="${RET}"
	fi

	echo "_AUTO=\"${_AUTO}\"" >> "${_TMPDIR}/debconf.default"
	export _AUTO
}

Internal_options ()
{
	if db_get linux-container/apt-recommends
	then
		_APT_RECOMMENDS="${RET}" # boolean (w/ empty)
	fi

	echo "_APT_RECOMMENDS=\"${_APT_RECOMMENDS}\"" >> "${_TMPDIR}/debconf.default"

	if db_get linux-container/debconf-frontend
	then
		_DEBCONF_FRONTEND="${RET}" # select
	fi

	_DEBCONF_FRONTEND="${_DEBCONF_FRONTEND:-dialog}"
	echo "_DEBCONF_FRONTEND=\"${_DEBCONF_FRONTEND}\"" >> "${_TMPDIR}/debconf.default"

	if db_get linux-container/debconf-priority
	then
		_DEBCONF_PRIORITY="${RET}" # select
	fi

	_DEBCONF_PRIORITY="${_DEBCONF_PRIORITY:-high}"
	echo "_DEBCONF_PRIORITY=\"${_DEBCONF_PRIORITY}\"" >> "${_TMPDIR}/debconf.default"

	if db_get linux-container/late-command
	then
		_LATE_COMMAND="${RET}" # string (w/ empty)
	fi

	echo "_LATE_COMMAND=\"${_LATE_COMMAND}\"" >> "${_TMPDIR}/debconf.default"

	if db_get linux-container/late-host-command
	then
		_LATE_HOST_COMMAND="${RET}" # string (w/ empty)
	fi

	echo "_LATE_HOST_COMMAND=\"${_LATE_HOST_COMMAND}\"" >> "${_TMPDIR}/debconf.default"

	if db_get linux-container/capabilities
	then
		_CAPABILITIES="${RET}" # string (w/ empty)
	fi

	echo "_CAPABILITIES=\"${_CAPABILITIES}\"" >> "${_TMPDIR}/debconf.default"

	_NUMBER="0"

	while db_get linux-container/mount${_NUMBER}/entry && [ "${RET}" ]
	do
		eval LINUX_CONTAINER_MOUNT${_NUMBER}_ENTRY="\"${RET}\"" # string (w/o empty)

		if db_get linux-container/mount${_NUMBER}/comment
		then
			eval LINUX_CONTAINER_MOUNT${_NUMBER}_COMMENT="\"${RET}\"" # string (w/ empty)
		fi

		_NUMBER="$((${_NUMBER} + 1))"
	done

	# FIXME: this is ugly
	if [ "${_NUMBER}" -gt 0 ]
	then
		LINUX_CONTAINER_MOUNT_NUMBER="$((${_NUMBER} - 1))"
	else
		LINUX_CONTAINER_MOUNT_NUMBER="${_NUMBER}"
	fi

	echo "LINUX_CONTAINER_MOUNT_NUMBER=\"${LINUX_CONTAINER_MOUNT_NUMBER}\"" >> "${_TMPDIR}/debconf.default"

	for _NUMBER in $(seq 0 ${LINUX_CONTAINER_MOUNT_NUMBER})
	do
		eval _COMMENT="$`echo LINUX_CONTAINER_MOUNT${_NUMBER}_COMMENT`"
		echo "LINUX_CONTAINER_MOUNT${_NUMBER}_COMMENT=\"${_COMMENT}\"" >> "${_TMPDIR}/debconf.default"

		eval _ENTRY="$`echo LINUX_CONTAINER_MOUNT${_NUMBER}_ENTRY`"
		echo "LINUX_CONTAINER_MOUNT${_NUMBER}_ENTRY=\"${_ENTRY}\"" >> "${_TMPDIR}/debconf.default"
	done
}

Distribution
Parent_distribution

case "$(dpkg --print-architecture)" in
	amd64)
		# Usage: Architecture CHOICES CHOICES_C Default
		Architecture "32-bit PC (i386), 64-bit PC (amd64)" "i386, amd64" "amd64"
		;;
esac

Archives
Parent_archives

Mirror

for _ARCHIVE in ${_ARCHIVES}
do
	case "${_ARCHIVE}" in
		*-security*)
			Mirror_security
			;;

		*-backports*)
			Mirror_backports
			;;
	esac
done

Parent_mirror

for _PARENT_ARCHIVE in ${_PARENT_ARCHIVES}
do
	case "${_PARENT_ARCHIVE}" in
		*-security)
			Parent_mirror_security
			;;

		*-backports)
			Parent_mirror_backports
			;;
	esac
done

Archive_areas
Parent_archive_areas

Packages
Local_repositories

Root_password
Network
Auto

Internal_options

db_stop
