#!/bin/sh

# --------------------
# --- variables ------
# --------------------
LANG="C"
SYSARCH="$( dpkg --print-architecture )"
QAPTDISTR_A="$( dash /usr/share/apps/q4os_system/bin/print_qaptdistr.sh )" #jessie, stretch, raspbian7

WDIR1="http://www.q4os.org/qtderepo/"
WDIR2="dists/$QAPTDISTR_A/main/binary-$SYSARCH/"
#WDIR1="www.q4os.org/.lang/"
#WDIR2=""
if [ "$QAPTDISTR_A" = "raspbian7" ] ; then
  WDIR2="dists/raspbian-jessie/main/binary-armhf/"
fi

TMPDIR01="/tmp/q4ilocinst.58FgtP1.q4os.$USER.tmp"
LOCALES_FL="/usr/share/apps/q4os_system/share/debtde.cod" # maps debian locales into their tde codes and human readable names
PACKAGES_FL="Packages.ok" # downloaded from tde repository
# TMP_CODES_FL="codes.tmp" # maps tde codes into human readable names, file is generated from packages file, the same format as $LOCALES_FL

# --------------------
# --- functions ------
# --------------------
print_help ()
{
  echo
  echo "available parameters:"
  echo " --print-tmpdir"
#  echo " --print-locale arg1"
  echo " --print-tdecode arg1"
  echo " --add-user-keymap"
  echo " --select-lang"
  echo " --list"
  echo " --get [arg1]" #[--nogui]
  echo " --install"
  echo
  echo "need parameter, exiting ..."
  echo
  return 0
}

# # get locale from tdecode arg
# get_locale ()
# {
#   if [ -z "$1" ] ; then
#     echo "" # no tde_code parameter
#     return 1
#   fi
#   local LOCC1="$( cat $LOCALES_FL | grep ";$1$" | awk -F';' '{ print $2 }' )"
#   if [ -z "$LOCC1" ] ; then
#     echo "" # emtpy locale
#     return 2
#   fi
#   echo "$LOCC1"
#   return 0
# }

# prints locale from tdecode arg
# print_locale ()
# {
#   if [ "$( echo $1 | awk '{ print length ($0) }' )" -le "1" ] ; then
#     echo "tde_code parameter too short, exiting ..."
#     return 1
#   fi
#   echo "Locale: $( cat $LOCALES_FL | grep ";$1$" | awk -F';' '{ print $2 }' )"
#   echo "Language: $( cat $LOCALES_FL | grep ";$1$" | awk -F';' '{ print $1 }' )"
#   echo "TDE_Code: $1"
#   return 0
# }

# prints tdecode from locale arg
print_tdecode ()
{
  # $HSTR1 ....... language_country part of locale argument entered
  # $HSTR2 ....... language part of locale argument entered
  # $HSTR3 ....... country part of locale argument entered
  # $LOCALE_VAR .. unique id of debtde row

  local HSTR1="$( echo $1 | awk -F'.' '{ print $1 }' )" # get part of locale before '.'
  local HSTR2="$( echo $HSTR1 | awk -F'_' '{ print $1 }' )" # get part of locale before '_'
  local HSTR3="$( echo $HSTR1 | awk -F'_' '{ print $2 }' )" # get part of locale after '_'

  if [ "$( echo $HSTR1 | awk '{ print length ($0) }' )" -le "1" ] ; then
    echo "locale parameter too short, exiting ..."
    return 1
  fi
  if [ "$( echo $HSTR2 | awk '{ print length ($0) }' )" -le "1" ] ; then
    echo "bad locale parameter, exiting ..."
    return 1
  fi

  if [ "$( echo $HSTR1 | awk '{ print length ($0) }' )" -ge "5" ] ; then
    LOCALE_VAR="$( cat $LOCALES_FL | grep -v "^#" | grep ";DIFF;" | grep ";$HSTR1" |  awk -F';' '{ print $2 }' )"
  fi
  if [ -z "$LOCALE_VAR" ] ; then
    LOCALE_VAR="$( cat $LOCALES_FL | grep -v "^#" | grep -v ";DIFF;" | grep ";$HSTR2\_" |  awk -F';' '{ print $2 }' )"
  fi
  if [ -z "$LOCALE_VAR" ] ; then
    LOCALE_VAR="$( cat $LOCALES_FL | grep -v "^#" | grep -v ";DIFF;" | grep ";$HSTR2\." |  awk -F';' '{ print $2 }' )"
  fi
  if [ -z "$LOCALE_VAR" ] ; then
    LOCALE_VAR="_not_found_"
  fi

  KGLCODE="$HSTR2"
  if [ -n "$( cat $LOCALES_FL | grep -v "^#" | grep ";DIFF;" | grep ";$LOCALE_VAR;" )" ] ; then
    KGLCODE=""$HSTR2"_"$HSTR3""
  fi
  if [ "$LOCALE_VAR" = "_not_found_" ] ; then
    KGLCODE="en_US"
  fi

  echo "Locale string entered: $1"
  echo "Locale parsed: $LOCALE_VAR"
  echo "Language: $( cat $LOCALES_FL | grep -v "^#" | grep ";$LOCALE_VAR;" | awk -F';' '{ print $1 }' )"
  echo "TDE_Code: $( cat $LOCALES_FL | grep -v "^#" | grep ";$LOCALE_VAR;" | awk -F';' '{ print $8 }' )"
  echo "Kdeglobals_Language_Code: $KGLCODE"
  echo "Kdeglobals_Country_Code: $( echo "$HSTR3" | awk '{ print tolower($0) }' )"
  echo "Keyboard_Code: $( cat $LOCALES_FL | grep -v "^#" | grep ";$LOCALE_VAR;" | awk -F';' '{ print $6 }' )"
  return 0
}

download_packages_file ()
{
  if [ ! -f "$PACKAGES_FL" ] ; then
    echo "Downloading packages file ..."
    rm -f Packages
    wget -T70 -t2 --progress=dot $WDIR1/$WDIR2/Packages
    XXX=$?
    echo ">>>>>> $XXX <<<<<<"
    if [ "$XXX" != "0" ] ; then
      echo "Download failed, check Internet connection, exiting ..."
      exit 1
    fi
    mv Packages $PACKAGES_FL # this ensures that Packages file is completely downloaded
    echo "  ... done"
  else
    echo "Packages file already downloaded ; ok."
  fi
}

# compose_langs ()
# {
#   if [ "$1" = "--use-packages-file" ] ; then
#     # compose languages from "Packages" file
#     download_packages_file
#     cat $PACKAGES_FL | grep Description: | grep "internationalized (i18n) files for TDE" | awk -F'Description: ' '{ print $2 }' | awk -F' \(' '{ print $1 }' > tmpfl01.tmp
#     cat $PACKAGES_FL | grep -i tde-i18n- | grep Filename: | awk -F'tde-i18n-' '{ print $3 }' | awk -F- '{ print $1 }' > tmpfl02.tmp
#     paste -d\; tmpfl01.tmp /dev/null /dev/null tmpfl02.tmp | sort > $TMP_CODES_FL
#     rm -f tmpfl01.tmp tmpfl02.tmp
#     return
#   fi
# 
#   cp $LOCALES_FL $TMP_CODES_FL
# }

# cli dialog to select a language
# select_language_nogui ()
# {
# }

# dialog to select a language
select_language_gui ()
{
  cat $LOCALES_FL | grep -v "^#" | grep -v "^$" | awk -F';' '{ print $1 ";" $2 ";" $8 }' | sort > tmpfl04.tmp
  sed -i 's/ /_/' tmpfl04.tmp
  RDVAL=$( kdialog --icon "message" --title "Language" --caption "select" --combobox "Select a language:" $( cat tmpfl04.tmp | awk -F';' '{ print $1 }' ) )
  if [ "$?" != "0" ] ; then
    # canceled
    rm -f tmpfl04.tmp
    return 1
  fi
  local LLANGUAG="$( cat tmpfl04.tmp | grep "^$RDVAL;" | awk -F';' '{ print $1 }' )"
  local LLLOCALE="$( cat tmpfl04.tmp | grep "^$RDVAL;" | awk -F';' '{ print $2 }' )"
  local LTDECODE="$( cat tmpfl04.tmp | grep "^$RDVAL;" | awk -F';' '{ print $3 }' )"
  rm -f tmpfl04.tmp
  echo "$LLANGUAG;$LLLOCALE;$LTDECODE"
  return 0
}

# --------------------
# --- script start ---
# --------------------
echo "Start ..."

if [ -z "$1" ] ; then
  print_help
fi

mkdir -p $TMPDIR01
cd $TMPDIR01

if [ "$1" = "--print-tmpdir" ] ; then
  echo "Temporary working dir: $TMPDIR01"
  exit 0
fi

if [ "$1" = "--list" ] ; then
  echo
  echo "Downloaded packages:"
  ls --format=single-column *.deb 2> /dev/null
  echo
  exit 0
fi

if [ "$1" = "--install" ] ; then
  if [ -n "$( check_apt_busy.sh )" ] ; then
    echo
    echo "Package system is busy now, try installation few minutes later."
    echo
    exit 10
  fi
  echo
  echo "Installing packages .."
  for CCFL in *.deb
  do
    echo "Processing $CCFL"
    sudo -n dpkg -i $CCFL
  done
  echo " .. done."
  echo
  exit 0
fi

if [ ! -f "$LOCALES_FL" ] ; then
  echo "Locales file missing, exit ..."
  exit 1
fi

if [ "$1" = "--select-lang" ] ; then
  RETV="$( select_language_gui )"
  if [ "$?" != "0" ] ; then
    exit 1  #canceled
  fi
  echo "$RETV"
  exit 0
fi

# prints locale from tdecode arg
# if [ "$1" = "--print-locale" ] ; then
#   print_locale "$2"
#   exit "$?"
# fi

# prints tdecode from locale arg
if [ "$1" = "--print-tdecode" ] ; then
  print_tdecode "$2"
  exit "$?"
fi

if [ "$1" = "--add-user-keymap" ] ; then
  if [ -z "$2" ] ; then
    echo "no keymap argument, exiting ..."
    exit 1
  fi
  CKMAP="$( kreadconfig --file "kxkbrc" --group "Layout" --key "LayoutList" )"
  if [ "$2" = "$CKMAP" ] ; then
    echo "keymap $2 already installed, no action made, exiting ..."
    exit 1
  fi
  echo "Recent user keymap: $CKMAP"
  echo "New user keymap: $2,$CKMAP"
  kwriteconfig --file "kxkbrc" --group "Layout" --key "LayoutList" "$2,$CKMAP"
  dcopfind kxkb
  if [ "$?" = 0 ] ; then
    # dcop kxkb kxkb setLayout $2
    dcopquit kxkb
    dcopstart kxkb
  fi
  exit 0
fi

if [ "$1" = "--get" ] ; then
  TDECODE="$2"
#   if [ "$2" = "--nogui" ] ; then
#     sort $LOCALES_FL | grep -v "^#" | grep -v "^$" | awk -F';' '{ print $1 " [" $8 "]" }' > tmpfl04.tmp
#     cat -n tmpfl04.tmp
#     echo
#     read -p "Enter a number to download a language pack .. " RDVAL
#     if [ -z "$RDVAL" ] ; then
#       echo "no input, exiting ..."
#       exit 1
#     fi
#     TDECODE="$( sed -n "$RDVAL p" tmpfl04.tmp | awk -F'[' '{ print $2 }' | awk -F']' '{ print $1 }' )"
#     rm -f tmpfl04.tmp
#     if [ -z "$TDECODE" ] ; then
#       echo "no tde code, exiting ..."
#       exit 1
#     fi
#   fi
  if [ -z "$2" ] ; then
    TDECODE="$( echo "$( select_language_gui )" | awk -F';' '{ print $3 }' )"
    if [ -z "$TDECODE" ] ; then
      echo "no tde language file found, exiting ..."
      exit 1
    fi
  fi
fi

if [ -z "$TDECODE" ] ; then
  echo "bad arguments, exiting ..."
  exit 1
fi

if [ -z "$( cat $LOCALES_FL | grep ";$TDECODE$" | awk -F';' '{ print $8 }' )" ] ; then
  echo "language \"$TDECODE\" not mapped, exiting ..."
  exit 1
fi

echo "Phase1 ..."
echo "TDE_Code: $TDECODE ; Language: "$( cat $LOCALES_FL | grep ";$TDECODE$" | awk -F';' '{ print $1 }' )" ; ok."
download_packages_file

FLDL="$( cat $PACKAGES_FL | grep Filename: | grep "/tde-i18n-$TDECODE-trinity_" | awk '{ print $2 }' )"
if [ -z "$FLDL" ] ; then
  echo "unkonwn language \"$TDECODE\" .. exiting ..."
  exit 1
fi

echo "Downloading language pack ..."
rm -f tde-i18n-$TDECODE-trinity_* # remove previously/partially downloaded file/s
wget -q -T70 -t2 $WDIR1/$FLDL
if [ "$?" != "0" ] ; then
  echo "Download error, check Internet connection, exiting ..."
  exit 1
fi
echo "  ... done."
exit 20
