#! /bin/sh -e

# Run reasonable xterm or alike under the locale set solely by $LANG 
# variable provided to this script as the first argument.

# I intentionally avoid using "LANG=?? x-terminal-emulator-m17n" syntax
# due to issues with some debian menu implementation.

# Provide default values
M17N_XTERM_C="xterm"
M17N_XTERM_E="xterm"
M17N_XTERM_U="uxterm"
M17N_XTERM_J="kterm"
M17N_XTERM_K="kterm"
# Check availability of safe fall back locale
# (Why Euro? Because I live in Europe.)
if grep -e "^en_IE@euro " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_TRAD="en_IE@euro"
elif grep -e "^en_US " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_TRAD="en_US"
elif grep -e "^en_GB " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_TRAD="en_GB"
else
  XLANG_EN_TRAD="C"
fi
if grep -e "^en_IE.UTF-8@euro " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_UTF8="en_IEUTF-8@euro"
elif grep -e "^en_US.UTF-8 " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_UTF8="en_US.UTF-8"
elif grep -e "^en_GB.UTF-8 " /etc/locale.gen 2>/dev/null >/dev/null ; then
  XLANG_EN_UTF8="en_GB.UTF-8"
else
  XLANG_EN_UTF8="C"
fi
# Customize defaults by user
S_CONF=/usr/share/m17n-env/x-terminal-emulator-m18n
U_CONF=$HOME/.m17n/x-terminal-emulator-m18n

if [ -r $U_CONF ]; then
  . $U_CONF
else
  mkdir -p $HOME/.m17n
  cp $S_CONF $U_CONF
fi

# First argument is locale (real name used in GNU libc or "traditional")
if [ "$1" = "traditional" ]; then
  case $LANG in
    ja_JP.UTF-8)
      XLANG="ja_JP.EUC-JP"
      ;;
    ko_KR.UTF-8)
      XLANG="ko_KR.EUC-KO"
      ;;
    *)
      XLANG=${LANG%.*}
      ;;
  esac
else
  XLANG=$1
fi

# Set best alternative locale when LANG locale is not available
if ! grep -e "^${XLANG} " /etc/locale.gen 2>/dev/null >/dev/null ; then
  case $XLANG in
    *.UTF-8|*.UTF-8@euro)
      XLANG=$XLANG_EN_UTF8
      ;;
    C)
      XLANG="C"
      ;;
    POSIX)
      XLANG="POSIX"
      ;;
    *)
      XLANG=$XLANG_EN_TRAD
      ;;
  esac
fi

#echo LANG=$LANG
#echo XLANG=$XLANG
#exit

shift

# Reset locales
unset LC_CTYPE
unset LC_NUMERIC
unset LC_TIME
unset LC_COLLATE
unset LC_MONETARY
unset LC_MESSAGES
unset LC_PAPER
unset LC_NAME
unset LC_ADDRESS
unset LC_TELEPHONE
unset LC_MEASUREMENT
unset LC_IDENTIFICATION
unset LC_ALL
LANG=$XLANG

# export locale
export LANG
export LC_CTYPE
export LC_NUMERIC
export LC_TIME
export LC_COLLATE
export LC_MONETARY
export LC_MESSAGES
export LC_PAPER
export LC_NAME
export LC_ADDRESS
export LC_TELEPHONE
export LC_MEASUREMENT
export LC_IDENTIFICATION
export LC_ALL

# check existence of user common configuration
S_CONF=/usr/share/m17n-env/locale/common/profile
U_CONF=$HOME/.m17n/locale/common/profile
if [ ! -f $U_CONF ]; then
  mkdir -p $HOME/.m17n/locale/common
  cp $S_CONF $U_CONF
fi
#
# check user locale dependent configuration file
case $XLANG in
    ja_JP.EUC-JP)
    C_CONF=/usr/share/m17n-env/locale/ja_JP.EUC-JP/profile
    M17N_XTERM=$M17N_XTERM_J
      ;;
    ko_KR.EUC-KR)
    C_CONF=/usr/share/m17n-env/locale/ko_KR.EUC-KR/profile
    M17N_XTERM=$M17N_XTERM_K
      ;;
  *.UTF-8|*.UTF-8@euro)
    C_CONF=/usr/share/m17n-env/locale/en_US.UTF-8/profile
    M17N_XTERM=$M17N_XTERM_U
    ;;
  C|POSIX)
    C_CONF=/usr/share/m17n-env/locale/C/profile
    M17N_XTERM=$M17N_XTERM_C
  ;;
  *)
    C_CONF=/usr/share/m17n-env/locale/C/profile
    M17N_XTERM=$M17N_XTERM_E
  ;;
esac

# source configuration
S_CONF=/usr/share/m17n-env/locale/$XLANG/profile
U_CONF=$HOME/.m17n/locale/$XLANG/profile
if [ ! -f $S_CONF ]; then
  . $C_CONF
else
  if [ ! -f $U_CONF ]; then
    mkdir -p $HOME/.m17n/locale/$XLANG
    cp $S_CONF $U_CONF
  fi
  . $U_CONF
fi
