#!/bin/sh

## Set up apt-tree
DEST_ROOT="$1"
DEST="$DEST_ROOT/archive"

APTTreeTemplate="etc/apt var/lib/apt/lists/partial var/lib/dpkg var/log/apt var/cache/apt/archives/partial"

mkdir -p $DEST

for d in $APTTreeTemplate; do
    mkdir -p $DEST/$d
done

cat > $DEST/etc/apt/sources.list << EOF
deb file:///archive /
EOF

APT_OPTIONS="-o Dir=$DEST -o Dir::State::status=/var/lib/dpkg/status -o Dir::Etc::preferencesparts=/etc/apt/preferences.d"

apt-get $APT_OPTIONS update
## Done with apt-tree

FIRSTLANG="${LANGUAGE%%:*}"
if [ $FIRSTLANG ];then
        logger -t language-installer "First LANG:$FIRSTLANG"
        LANGCODE="${FIRSTLANG%%_*}"
else
        LANGCODE="${LANG%%_*}"
fi

LANGCODE="${LANGCODE%%.*}"
LANGCODE="${LANGCODE%%@*}"

if [ $FIRSTLANG ];then
    LOCALECODE="${FIRSTLANG}"
else
    LOCALECODE="${LANG%%.*}"
fi

LOCALECODE="${LOCALECODE%%@*}"
logger -t language-installer "langcode: $LANGCODE"
logger -t language-installer "localcode: $LOCALECODE"

PKG_FILE="$DEST_ROOT/pkgs"
LANG_FILE="$DEST_ROOT/lang-present"
HOOKS_FILE="$DEST_ROOT/hooks-present"

LANG_PRESENT=""

LANGPKG="$LANGCODE"
if [ "$LOCALECODE" = "zh_TW" ] ||
   [ "$LOCALECODE" = "zh_MO" ] ||
   [ "$LOCALECODE" = "zh_HK" ]; then
  LANGPKG="zh-hant"
elif [ "$LANGCODE" = "zh" ]; then
  LANGPKG="zh-hans"
fi

# TODO: This list of package names should be derived from
# language-selector
BASE_LANG_PKG="language-pack-$LANGPKG"

packages="${BASE_LANG_PKG} language-support-$LANGPKG"
packages="${packages} language-pack-gnome-$LANGPKG"
packages="${packages} language-pack-kde-$LANGPKG"
case "$LANGPKG" in
    zh-hans|zh-hant)
	packages="${packages} gnome-user-guide-zh"
	;;
    *)
	packages="${packages} gnome-user-guide-$LANGPKG"
	;;
esac
case "$LANGPKG" in
    be)
	packages="${packages} openoffice.org-l10n-be-by"
	;;
    en)
	packages="${packages} openoffice.org-l10n-en-gb"
	packages="${packages} openoffice.org-l10n-en-za"
	;;
    pt)
	packages="${packages} openoffice.org-l10n-en-pt"
	packages="${packages} openoffice.org-l10n-en-pt-br"
	;;
    zh-hans)
	packages="${packages} openoffice.org-l10n-zh-cn"
	;;
    zh-hant)
	packages="${packages} openoffice.org-l10n-zh-tw"
	;;
    *)
	packages="${packages} openoffice.org-l10n-$LANGPKG"
	;;
esac
case "$LANGPKG" in
    en)
	packages="${packages} openoffice.org-help-en-gb"
	packages="${packages} openoffice.org-help-en-us"
	;;
    hi)
	packages="${packages} openoffice.org-help-hi-in"
	;;
    pt)
	packages="${packages} openoffice.org-help-pt"
	packages="${packages} openoffice.org-help-pt-br"
	;;
    th)
	;;
    zh-hans)
	packages="${packages} openoffice.org-help-zh-cn"
	;;
    zh-hant)
	packages="${packages} openoffice.org-help-zh-tw"
	;;
    *)
	packages="${packages} openoffice.org-help-$LANGPKG"
	;;
esac
case "$LANGPKG" in
    af|ca|de|fr|hr|hu|it|lt|pl|ro|sh|sl|sr|zu)
	packages="${packages} openoffice.org-hyphenation"
	packages="${packages} openoffice.org-hyphenation-$LANGPKG"
	;;
    en)
	packages="${packages} openoffice.org-hyphenation"
	packages="${packages} openoffice.org-hyphenation-en-us"
	;;
    *)
	;;
esac
case "$LANGPKG" in
    ca|cs|fr|hu|it|ne|pl|ro|ru|sk)
	packages="${packages} openoffice.org-thesaurus-$LANGPKG"
	;;
    de)
	packages="${packages} openoffice.org-thesaurus-de"
	packages="${packages} openoffice.org-thesaurus-de-ch"
	;;
    en)
	packages="${packages} openoffice.org-thesaurus-en-au"
	packages="${packages} openoffice.org-thesaurus-en-us"
	;;
    *)
	;;
esac

echo "${packages}" > "$PKG_FILE"

export APT_OPTIONS
export LANGCODE
export LOCALECODE

# Let any hooks add their own pkgs to install by adding to PKGS
run-parts /usr/share/language-installer/pkg-hooks --arg="$PKG_FILE"

is_pkg_available()
{
  # It would be nice if apt-cache returned an error code, but this will do
  [ "$(apt-cache $APT_OPTIONS search ^$1$)" != "" ];
}

is_pkg_installed()
{
  dpkg -s "$1" | grep 'Status:.* installed' >/dev/null 2>&1;
}

# Make sure the packages are in the apt cache.  If we try to install one that
# isn't, the apt-get line will fail.  So we filter here.
MAYBE_PKGS="$(cat $PKG_FILE)"
PKGS=""
for pkg in $MAYBE_PKGS; do
  if is_pkg_available "$pkg" && ! is_pkg_installed "$pkg"; then
    PKGS="$PKGS $pkg"
  fi
done
echo "$PKGS" > "$PKG_FILE"

if is_pkg_available "$BASE_LANG_PKG" || is_pkg_installed "$BASE_LANG_PACK"; then
  LANG_PRESENT="$LANGCODE"
fi
echo "$LANG_PRESENT" > "$LANG_FILE"

ls -1 /usr/share/language-installer/hooks > "$HOOKS_FILE"

exit 0
