# shellcheck shell=dash disable=SC2034,SC2016
___x_cmd log init apt

xrc mirror proxy
xrc:mod:lib apt     __xmirror/_index __xproxy __repo install nv fz ls osv snap

___x_cmd_apt___main(){
    [ "$#" -gt 0 ] ||       set -- fz

    ___x_cmd_hascmd apt   ||  {
        apt:warn "apt is not found."
        return 1
    }

    local op="$1";          shift
    case "$op" in
        osv)                ___x_cmd_apt_osv                    "$@" ;;

        i|install)          ___x_cmd_apt_install                "$@" ;;
        # ls|ll|lr|la)     ;;
        ls)                 ___x_cmd_apt_ls                     "$@" ;;
        la)                 ___x_cmd_apt_la                     "$@" ;;

        nv)                 ___x_cmd_apt___nv                   "$@" ;;
        fz)                 ___x_cmd_apt___fz                   "$@" ;;
        --fzdata)           ___x_cmd_apt_install___fz_data      "$@" ;;
        --fzfpreview)       ___x_cmd_apt_install___fzf_preview  "$@" ;;
        proxy|--xproxy)     ___x_cmd_apt___xproxy               "$@" ;;
        mirror|--xmirror)   ___x_cmd_apt___xmirror              "$@" ;;

        reinstall|update|\
        remove|autoremove|\
        upgrade|full-upgrade|\
        edit-sources|satisfy)
                            ___x_cmd_apt___exec     "$op"       "$@" ;;


        snap)               ___x_cmd_apt_snap                   "$@" ;;

        -h|--help)          ___x_cmd help -m apt                "$@" ;;
        *)                  ___x_cmd_cmds apt       "$op"       "$@" ;;
    esac
}

___x_cmd_apt___init(){
    ___X_CMD_APT_CACHE_PATH="$___X_CMD_ROOT_DATA/apt/cache"
    ___x_cmd mkdirp "$___X_CMD_APT_CACHE_PATH"
}

___x_cmd_apt___init

___x_cmd_apt___exec(){
    local x_=""
    O=apt ___x_cmd_proxy wrap get_ || true

    local http_proxy=
    local https_proxy=
    local all_proxy=
    if [ -n "$x_" ]; then
        ___x_cmd_proxy___str_load_ "$x_"
        eval ___x_cmd_apt___xproxy___inner_set "$x_"
    else
        ___x_cmd_proxy normalize || true
    fi

    if [ -z "${http_proxy}${https_proxy}" ]; then
        [ -z "$all_proxy" ]     || {
            set -- -o acquire::http::proxy="$all_proxy"     "$@"
            set -- -o acquire::https::proxy="$all_proxy"    "$@"
        }
    else
        [ -z "$http_proxy" ]    ||      \
            set -- -o acquire::http::proxy="$http_proxy"    "$@"
        [ -z "$https_proxy" ]   ||      \
            set -- -o acquire::https::proxy="$https_proxy"  "$@"
    fi

    local IFS=' '
    if ! ___x_cmd_is_termux && [ "$(id -u)" -ne 0 ]; then
        apt:info "running command  →  x sudo apt $*"
        ___x_cmd sudo apt "$@"
    else
        ___x_cmd_cmds apt "$@"
    fi
}

___x_cmd_apt___lsraw(){
    local x_=; ___x_cmd_apt___lsraw_ || return $?
    ___x_cmd_cmds_cat "$x_"
}

___x_cmd_apt___lsraw_(){
    x_="$___X_CMD_APT_CACHE_PATH/lsname"

    {
        [ "$x_" -nt "/var/lib/apt/lists/partial" ] || [ "$x_" -nt "${TERMUX__ROOTFS%/files}/cache/apt/pkgcache.bin" ]
    } || {
        ___x_cmd rmrf "$x_"
        ___x_cmd_apt___repo_lsname > "$x_"
    }
    [ -f "$x_" ]
}

___x_cmd_apt___hasindex(){
    [ -f "/var/lib/apt/lists/partial" ] || [ -f "${TERMUX__ROOTFS%/files}/cache/apt/pkgcache.bin" ]
}

___x_cmd_apt___haspriv(){
    [ -w "/var/lib/apt/lists" ] || [ -w "${TERMUX__ROOTFS%/files}/cache/apt/pkgcache.bin" ]
}
