
xrc:mod:lib     termux      pd/mirror   pd/run  pd/curlaria2c

___X_CMD_TERMUX_PD_ROOTFS="${TERMUX__PREFIX}/var/lib/proot-distro/installed-rootfs"

___x_cmd_termux_pd(){
    [ $# -gt 0 ]    ||  set -- --help

    local op="$1";  shift
    case "$op" in
        i)          op=install ;;
        l)          op=login ;;
        ls)         op=list  ;;
        rm)         op=remove ;;
        clear)      op=clear-cache ;;
        cp)         op=copy ;;
    esac

    case "$op" in
        -h|--help)  ___x_cmd_termux_pd_help "$@"
                    return 0 ;;

        mirror|run|prep|install|curlaria2c|cnpatch|infuse|cd|rootfs|rootfs_)
                    ___x_cmd_termux_pd_"$op"        "$@" ;;

        --)         ___x_cmd_termux_pd___cmd        "$@" ;;

        *)          ___x_cmd_termux_pd___cmd  "$op" "$@" ;;
    esac
}

___x_cmd_termux_pd_cnpatch(){
    local bindirpath="$___X_CMD_ROOT_MOD/termux/lib/pd/bin"
    local pdbinpath; pdbinpath="$(command -v proot-distro)"
    local pdbinpath_auto="${pdbinpath%/*}/proot-distro-auto"

    case "$1" in
        -h|--help)      ___x_cmd help -m termux pd cnpatch "$@";    return 0    ;;
        --unset)        ___x_cmd_cmds rm -f "$pdbinpath_auto";      return $?   ;;
    esac

    ___x_cmd_cmds chmod +x "$bindirpath/curl"

    [ ! -f "$pdbinpath_auto" ] || {
        termux:info "Abort because already generated -> $pdbinpath_auto"
        return 0
    }

    ___x_cmd_cmds sed \
        's|export PATH="/data/data/com.termux/files/usr/bin"|export PATH="${___X_CMD_TERMUX_BINPATH+"${___X_CMD_TERMUX_BINPATH}:"}/data/data/com.termux/files/usr/bin"|' \
        "$pdbinpath" >"${pdbinpath_auto}"

    ___x_cmd_cmds chmod +x "${pdbinpath_auto}"
    termux:info "Successfully Generated -> $pdbinpath_auto"
}

___x_cmd_termux_pd_install(){
    local pdbinpath; pdbinpath="$(command -v proot-distro)"
    local pdbinpath_auto="${pdbinpath%/*}/proot-distro-auto"

    if [ -f "$pdbinpath_auto" ]; then
        local bindirpath="$___X_CMD_ROOT_MOD/termux/lib/pd/bin"
        ___X_CMD_TERMUX_BINPATH="$bindirpath" ___x_cmd_cmds proot-distro-auto install "$@"
    else
        ___x_cmd_cmds proot-distro install "$@"
        return $?
    fi
}

___x_cmd_termux_pd___cmd(){
    ___x_cmd_hascmd proot-distro || {
        ___x_cmd_termux_pd_prep

        ___x_cmd_hascmd proot-distro || N=termux M="Fail to prepare proot-distro command. Maybe try again later" log:ret:1
    }

    ___x_cmd_cmds proot-distro "$@"
}

___x_cmd_termux_pd_help(){
    # ___x_cmd_termux_pd___cmd -h "$@"
    ___x_cmd help -m termux pd "$@"
}

___x_cmd_termux_pd_prep(){
    ___x_cmd_cmds pkg reinstall -y proot proot-distro 1>&2
}

___x_cmd_termux_pd_cd(){
    case "$1" in
        -h|--help)      ___x_cmd help -m termux pd cd "$@";    return 0    ;;
    esac

    if [ "$#" -eq 0 ]; then
        ___x_cmd cd "${___X_CMD_TERMUX_PD_ROOTFS}"
    else
        local fp="$1"
        ___x_cmd cd "${___X_CMD_TERMUX_PD_ROOTFS}/${fp#/}"
    fi
}

# ___x_cmd_termux_pd_rm(){
#     [ $# -gt 0 ]    ||  set -- --help

#     case "$1" in
#         -h|--help)      ___x_cmd help -m termux pd rm "$@";    return 0    ;;
#     esac

#     local fp="$1"
#     local distfp="${___X_CMD_TERMUX_PD_ROOTFS}/${fp#/}"
#     termux:info --filepath "$distfp"  "Removing -> ${fp}"
#     ___x_cmd rmrf "$distfp"
# }

___x_cmd_termux_pd_rootfs_(){
    if [ $# -gt 0 ]; then
        x_="${___X_CMD_TERMUX_PD_ROOTFS}/${1#/}"
    else
        x_="${___X_CMD_TERMUX_PD_ROOTFS}"
    fi
}

___x_cmd_termux_pd_rootfs(){
    case "$1" in
        -h|--help)      ___x_cmd help -m termux pd rootfs "$@";    return 0    ;;
    esac

    local x_=""
    ___x_cmd_termux_pd_rootfs_ "$@" || return $?
    printf "%s\n" "$x_"
}
