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

BASEDIR=$(dirname "$0")
DEX="$BASEDIR"/shizuku.bin

if [ ! -f "$DEX" ]; then
  echo "Cannot find $DEX, please check the tutorial in Shizuku app"
  exit 1
fi

if [ $(getprop ro.build.version.sdk) -ge 34 ]; then
  if [ -w $DEX ]; then
    echo "On Android 14+, app_process cannot load writable dex."
    echo "Attempting to remove the write permission..."
    chmod 400 $DEX
  fi
  if [ -w $DEX ]; then
    echo "Cannot remove the write permission of $DEX."
    echo "You can copy to file to terminal app's private directory (/data/data/<package>, so that remove write permission is possible"
    exit 1
  fi
fi

# Replace "PKG" with the application id of your terminal app
[ -z "$RISH_APPLICATION_ID" ] && export RISH_APPLICATION_ID="com.termux"

function show_help()
{
echo -e "Usage: shizuku [command [arg ...]] [options]

Options:
    -c, --command <command>           : run command as shizuku/SUI user
    -s, --shell                       : open shizuku shell
    -h, --help                        : show help screen

Author: Arie-SR91/RamaVL
Github: https://github.com/ArieSR91
"
}

function create_shz()
{
    package_name="$2"
    cd "$package_name"
    tar --exclude='SHIZUKU' -cJvf data.tar.xz *
    tar -cJvf control.tar.xz SHIZUKU
    zip -qr $package_name.shz control.tar.xz data.tar.xz
    rm control.tar.xz data.tar.xz
    mv $package_name.shz ..
    cd ..
    return 0
}

function get_status()
{
    if /system/bin/app_process -Djava.class.path="$DEX" /system/bin \
        rikka.shizuku.shell.ShizukuShellLoader --version 2>/dev/null; then
        echo "✓ Shizuku is running"
    else
        echo "✗ Shizuku is not running"
        return 1
    fi
}

case $1 in
    -s|--shell|shell)
        get_status
        /system/bin/app_process -Djava.class.path="$DEX" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader /data/local/tmp/shizuku/login.sh
        ;;
    -c|--cmd|--command)
        cmd="${@:2}"
        /system/bin/app_process -Djava.class.path="$DEX" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader -c "$cmd"
        ;;
    -h|--help|help)
        show_help
        ;;
    status)
        get_status
        ;;
    create|shzc)
        create_shz $@
        ;;
    install)
        cmd="${@:2}"
        /system/bin/app_process -Djava.class.path="$DEX" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader -c "pm install $cmd"
        ;;

    *)
        if [ "$1" == "" ]; then
            show_help
            exit
        fi
        cmd="${@:1}"
        #TERMUX_HOME="/data/data/com.termux/files/home"
        #TERMUX_PREFIX="/data/data/com.termux/files/usr"
        #SHIZUKU_HOME="/data/local/tmp/shizuku/home"
        #SHIZUKU_PREFIX="/data/local/tmp/shizuku"
        #fixed_cmd="${cmd//$TERMUX_HOME/$SHIZUKU_HOME}"
        #fixed_cmd="${fixed_cmd//$TERMUX_PREFIX/$SHIZUKU_PREFIX}"
        /system/bin/app_process -Djava.class.path="$DEX" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader -c ". /data/local/tmp/shizuku/login.sh command $cmd"
        ;;
esac
