#!/bin/sh
set -e

#uncomment this to just do a test run without actually installing/removing packages
#TEST='echo WOULD RUN:'

REQUESTED_LANGUAGES=/usr/share/#DEFAULTS_PACKAGE#/langpacks.txt
INSTALLED_LANGUAGES=/root/installed_languages
NOREMOVE_PACKAGES=/root/noremove_packages

echo 'P: Configuring language support...'

if [ ! -e "$REQUESTED_LANGUAGES" ]; then
    echo "P: No $REQUESTED_LANGUAGES file, skipping"
    exit 0
fi


# determine installed languages
trap "rm -f $INSTALLED_LANGUAGES $NOREMOVE_PACKAGES" 0 HUP INT ABRT FPE PIPE TERM
dpkg -l 'language-pack-*'|perl -ne 'if (/^ii\s+.*language-pack-((?:zh-)?[a-z]+)\s/) { print "$1\n" }' | sort -u > $INSTALLED_LANGUAGES

remove=`join -j 1 -v 1 $INSTALLED_LANGUAGES $REQUESTED_LANGUAGES`
installed=`xargs < $INSTALLED_LANGUAGES`
requested=`sed "s/ complete//" < "$REQUESTED_LANGUAGES" | xargs`

# determine installed packages for requested languages
for lang in $requested; do
    check-language-support --show-installed -l $lang | xargs -n1 >> $NOREMOVE_PACKAGES
done

echo "requested: $requested"
echo "installed: $installed"
echo -n 'to remove: '
echo "$remove" | xargs

# removal
for lang in $remove; do
    pkgs=`check-language-support --show-installed -l $lang | xargs -n1`
    # above list might contain packages which are also needed by the languages
    # we want to install/keep (e. g. poppler-data is needed by many languages),
    # so filter those out
    pkgs=`echo "$pkgs" | join -j1 -v1 - $NOREMOVE_PACKAGES | xargs`
    echo "P: Removing packages for language $lang: $pkgs"
    $TEST apt-get -y -q purge $pkgs
done

# install
# note that we iterate through all requested languages, instead of just
# computing the delta between requested and installed; this will catch
# languages which are already installed, but without complete support
# $REQUESTED_LANGUAGES's last line is not usually terminated with a CR, so
# append one to ensure that "read" sees that.
(cat "$REQUESTED_LANGUAGES"; echo) | while read lang complete; do
    [ -n "$lang" ] || continue
    pkgs=`check-language-support -l $lang`
    if [ "$complete" != "complete" ]; then
	pkgs=`echo "$pkgs" | xargs -n1 | grep ^language-pack-` || true
    fi
    if [ -n "$pkgs" ]; then
	echo "P: Installing packages for language $lang: $pkgs"
	$TEST apt-get -y -q install $pkgs
    fi
done

echo 'P: Language support configuration done.'
