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

xrc mirror
xrc:mod:lib apk     __xmirror/_index __xproxy __repo install ls osv nv fz

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

    ___x_cmd hascmd apk   ||  {
        apk:warn "apk command not found."
        return 1
    }

    local op="$1"; shift
    case "$op" in
        osv)                ___x_cmd_apk_osv                    "$@" ;;
        i|install)          ___x_cmd_apk_install                "$@" ;;

        ls)                 ___x_cmd_apk_ls                     "$@" ;;
        la)                 ___x_cmd_apk_la                     "$@" ;;

        nv)                 ___x_cmd_apk___nv                   "$@" ;;
        fz)                 ___x_cmd_apk___fz                   "$@" ;;
        --fzdata)           ___x_cmd_apk_install___fz_data      "$@" ;;
        --fzfpreview)       ___x_cmd_apk_install___fzf_preview  "$@" ;;

        proxy|--xproxy)     ___x_cmd_apk___xproxy               "$@" ;;
        mirror|--xmirror)   ___x_cmd_apk___xmirror              "$@" ;;

        add|update|upgrade)
                            ___x_cmd_apk___exec         "$op"   "$@" ;;
        -h|--help)          ___x_cmd help -m apk "$@";  return       ;;

        --runmain|--)       ___x_cmd_cmds apk                   "$@" ;;

        del|fix|cache|info|list|dot|policy|search|index|fetch|manifest|verify|audit|stats|version)
                            ___x_cmd_cmds apk           "$op"   "$@" ;;

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

___x_cmd_apk___init(){
    ___X_CMD_APK_CACHE_PATH="$___X_CMD_ROOT_DATA/apk/cache"
    ___x_cmd mkdirp "$___X_CMD_APK_CACHE_PATH"
}

___x_cmd_apk___init

___x_cmd_apk___exec(){
    if [ "$(id -u)" -ne 0 ]; then
        apk:info "running command  →  x sudo apk $*"
        ___x_cmd_apk___xproxy run ___x_cmd_cmds sudo apk "$@"
    else
        ___x_cmd_apk___xproxy run ___x_cmd_cmds apk "$@"
    fi

}

___x_cmd_apk___lsraw(){
    local x_=; ___x_cmd_apk___lsraw_ || return 1
    ___x_cmd_cmds_cat "$x_"
}

___x_cmd_apk___lsraw_(){
    x_="$___X_CMD_APK_CACHE_PATH/lsname"

    local apkfp=;   apkfp="$(___x_cmd_cmds ls -1 /var/cache/apk/APKINDEX.* 2>/dev/null | head -n 1)"
    [ "$x_" -nt "$apkfp" ] || {
        ___x_cmd rmrf "$x_"
        ___x_cmd_cmds apk search -q > "$x_"
    }

    [ -f "$x_" ]
}
