#!/data/data/com.termux/files/usr/bin/sh

# tsu

show_usage() {
  echo 'tsu - a wrapper for su for Termux'
  echo
  echo 'Usage: tsu [-e|-p|-s <shell>]'
  echo
  echo '-s [</path/to/shell>]'
  echo '    Use an alternate specified shell. `//usr` is expanded to $PREFIX.'
  echo '-p'
  echo '    Prepend /system/bin and /system/xbin to PATH.'
  echo '-e'
  echo '    Setup up some enviroment variables as when in Termux.'
}
	
# parse the options
# TODO: validate command line arguments
while getopts ':ehps:' opt ; do
case $opt in
  e)
      SETUP_ENV=1
      ;;
	  
  s)
      USER_SHELL=$OPTARG
      ;;
  h) 
      show_usage
      exit
      ;;
  p)
      PREPEND_SYSTEM_PATH=1
      ;;
esac
done;

# prefix check
test -z "$PREFIX" && PREFIX=/data/data/com.termux/files/usr

# prepend path
if test -n "$PREPEND_SYSTEM_PATH"; then
  PATH="/system/bin:/system/xbin:$PATH"
fi

# export environment variables.
if test -n "$SETUP_ENV"; then
  export HOME=/data/data/com.termux/files/home
  TERMUX_PATHS=data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets
  if test -n "$PREPEND_SYSTEM_PATH"; then
    PATH="$PATH:$TERMUX_PATHS"
  else 
    PATH="$TERMUX_PATHS:$PATH"
  fi;
export PATH;
fi;

# select shell 
if test -z "$USER_SHELL"; then
  # check if user has set shell
  if test -x "$HOME/.termux/shell" ; then
    ROOT_SHELL=$HOME/.termux/shell
  # has installed bash?
  elif test -x "$PREFIX/bin/bash" ; then
      ROOT_SHELL="$PREFIX/bin/bash"
# no..fallback to default ash
  else
    ROOT_SHELL="$PREFIX/bin/ash"
  fi
else 
  # expand //usr/ to /usr/
  USER_SHELL_EXPANDED=$(echo "$USER_SHELL" | sed "s|^//usr/|$PREFIX/|")
  ROOT_SHELL="$USER_SHELL_EXPANDED"
fi

# using the -c option of su allows to pass enviroment variables
for s in '/system/xbin/su' '/su/bin/su'; do
  if [ -e "$s" ]; then
    exec "$s" --preserve-environment -c "LD_LIBRARY_PATH=$PREFIX/lib $ROOT_SHELL"
  fi;
done;