#! /bin/sh
set -e

. /usr/share/debconf/confmodule

supported () {
	grep -q "^$1\$" /usr/share/localechooser/SUPPORTED-short
}

# Recover from broken debian-installer/locale settings.
db_get debian-installer/locale
LOCALE="$RET"
if ! supported "$LOCALE"; then
	db_set debian-installer/locale ''
fi

CODE=$?
PATH="/usr/lib/oem-config/locale:$PATH" localechooser || CODE="$?"

# We need to duplicate this code because localechooser has the right to
# assume that its later scripts are only run once, but oem-config doesn't
# have that luxury.

db_get debian-installer/locale
LOCALE="$RET"

db_get debian-installer/language
LANGLIST="$RET"

db_get localechooser/supported-locales
EXTRAS="$(echo "$RET" | sed 's/,//g')"

if [ "$CODE" = 0 ]; then
	grep -v '^\(LANG\|LANGUAGE\)=' /etc/environment | (
		echo "LANG=\"$LOCALE\""
		echo "LANGUAGE=\"$LANGLIST\""
	) > /etc/environment.new
	mv /etc/environment.new /etc/environment

	if [ -e /etc/default/gdm ]; then
		sed -i "s,^#*LANG=.*,LANG=$LOCALE,g" /etc/default/gdm
	fi
fi

# Even if we're backing up, we need to generate the new locale so that the
# debconf frontend can be restarted using it.

if ([ "$CODE" = 0 ] || [ "$CODE" = 10 ]) && \
    [ "$LOCALE" ] && supported "$LOCALE"; then
	# If the locale isn't already valid, append it to locale.gen
	gen=
	if /usr/sbin/validlocale "$LOCALE" >> /etc/locale.gen; then
		: # Nothing to do
	else
		# New locale added to locale.gen, generate it
		gen=1
	fi
	for loc in $EXTRAS; do
		if [ "$loc" = "$LOCALE" ]; then
			continue
		fi
		if /usr/sbin/validlocale "$loc" >> /etc/locale.gen; then
			: # Nothing to do
		else
			# New locale added to locale.gen, generate it
			gen=1
		fi
	done
	if [ "$gen" ]; then
		locale-gen --keep-existing
	fi
fi

# TODO: kbd/cyr handling?

exit "$CODE"
