#!/bin/sh

. /usr/share/debconf/confmodule

set -e

dev=$1
id=$2
part=$dev/$id

cd $dev

[ -f $part/method ] || exit 0

method=$(cat $part/method)

if [ "$method" = swap ]; then
	:
elif [ -f $part/acting_filesystem ]; then
	filesystem=$(cat $part/acting_filesystem)
	case "$filesystem" in
	    ext2|fat16|fat32|ntfs)
		;;
	    *)
		exit 0
		;;
	esac
else
	exit 0
fi

choice_mountpoint () {
	case "$filesystem" in
	    ext2|fat16|fat32|ntfs)
		if [ -f $part/mountpoint ]; then
			mp=$(cat $part/mountpoint)
		else
			db_metaget partman-basicfilesystems/text/no_mountpoint description
			mp="$RET"
		fi
		db_metaget partman-basicfilesystems/text/specify_mountpoint description
		printf "mountpoint\t%s\${!TAB}%s\n" "$RET" "$mp"
		;;
	esac
}

choice_options () {
	[ "$filesystem" ] || return 0
	db_metaget partman-basicfilesystems/text/options description
	printf "options\t%s\${!TAB}%.45s\n" "$RET" "$(get_mountoptions $dev $id)"
}

choice_format_swap () {
	if [ "$method" = swap ] && [ -f $part/detected_filesystem ] && \
	   [ "$(cat $part/detected_filesystem)" = linux-swap ];	then
		db_metaget partman-basicfilesystems/text/format_swap description
		description="$RET"
		if [ -f $part/format ]; then
			db_metaget partman-basicfilesystems/text/yes description
		else
			db_metaget partman-basicfilesystems/text/no description
		fi
		printf "format_swap\t%s\${!TAB}%s\n" "$description" "${RET}"
	fi
}

choice_label () {
	# allow to set label only if the partition is to be formatted
	[ -f $part/format ] || return 0
	[ ! -f $part/formatted \
	  -o $part/formatted -ot $part/method \
	  -o $part/formatted -ot $part/filesystem ] || return 0
	case "$filesystem" in
	    ext2)
		if [ -f $part/label ]; then
			label=$(cat $part/label)
		else
			db_metaget partman-basicfilesystems/text/none description
			label=$RET
		fi
		db_metaget partman-basicfilesystems/text/specify_label description
		printf "label\t%s\${!TAB}%s\n" "$RET" "$label"
		;;
	    _no_fat16|_no_fat32) # we dont have tools to set label of FAT file systems
		if [ -f $part/label ]; then
			label=$(cat $part/label)
		else
			db_metaget partman-basicfilesystems/text/none description
			label=$RET
		fi
		db_metaget partman-basicfilesystems/text/specify_label description
		printf "label\t%s\${!TAB}%s\n" "$RET" "$label"
		;;
	esac
}

choice_reserved () {
	local reserved
	[ "$filesystem" = ext2 ] || return 0
	# allow to set reserved space only if the partition is to be formatted
	[ -f $part/format ] || return 0
	[ ! -f $part/formatted \
	  -o $part/formatted -ot $part/method \
	  -o $part/formatted -ot $part/filesystem ] || return 0
	if [ -f $part/reserved_for_root ]; then
		reserved=$(cat $part/reserved_for_root)
	else
		reserved=5
	fi
	db_metaget partman-basicfilesystems/text/reserved_for_root description
	printf "reserved_for_root\t%s\${!TAB}%s\n" "$RET" "$reserved%"
}

choice_usage () {
	local usage
	[ "$filesystem" = ext2 ] || return 0
	# allow to set usage only if the partition is to be formatted
	[ -f $part/format ] || return 0
	[ ! -f $part/formatted \
	  -o $part/formatted -ot $part/method \
	  -o $part/formatted -ot $part/filesystem ] || return 0
	if [ -f $part/usage ]; then
		usage=$(cat $part/usage)
	else
		db_metaget partman-basicfilesystems/text/typical_usage description
		usage=$RET
	fi
	db_metaget partman-basicfilesystems/text/usage description
	printf "usage\t%s\${!TAB}%s\n" "$RET" "$usage"
}

choice_mountpoint

choice_options

choice_format_swap

choice_label

choice_reserved

choice_usage
