# shellcheck shell=dash disable=SC2034,SC2016

___x_cmd log init dnf
xrc mirror
xrc:mod:lib dnf     __xmirror/_index __xproxy __repo install nv fz snap

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

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

    local op="$1"; shift
    case "$op" in
        install)            ___x_cmd_dnf_install    "$@" ;;

        nv)                 ___x_cmd_dnf___nv       "$@" ;;
        fz)                 ___x_cmd_dnf___fz                   "$@" ;;
        --fzdata)           ___x_cmd_dnf_install___fz_data      "$@" ;;
        --fzfpreview)       ___x_cmd_dnf_install___fzf_preview  "$@" ;;
        proxy|--xproxy)     ___x_cmd_dnf___xproxy   "$@" ;;
        mirror|--xmirror)   ___x_cmd_dnf___xmirror  "$@" ;;

        autoremove|shell|distro-sync|remove|\
        reinstall|update|upgrade|downgrade|\
        upgrade-minimal|makecache)
                            ___x_cmd_dnf___exec     "$op"   "$@" ;;

        --help|-h)          ___x_cmd help -m dnf;          return       ;;

        snap)               ___x_cmd_dnf_snap               "$@" ;;

        *)                  ___x_cmd_cmds dnf       "$op"   "$@" ;;
    esac
}

___x_cmd_dnf___init(){
    ___X_CMD_DNF_CACHE_PATH="$___X_CMD_ROOT_DATA/dnf/cache"
    ___x_cmd mkdirp "$___X_CMD_DNF_CACHE_PATH"
}

___x_cmd_dnf___init

___x_cmd_dnf___exec(){
    if [ "$(id -u)" -ne 0 ]; then
        dnf:info "running command  →  x sudo dnf $*"
        ___x_cmd_dnf___xproxy run ___x_cmd sudo dnf "$@"
    else
        ___x_cmd_dnf___xproxy run ___x_cmd_cmds dnf "$@"
    fi
}

___x_cmd_dnf___lsraw(){
    local x_=; ___x_cmd_dnf___lsraw_ || return 1
    ___x_cmd_cmds_cat "$x_"
}


___x_cmd_dnf___lsraw_(){
    x_="$___X_CMD_DNF_CACHE_PATH/lsname"
    local cache_fp
    if [ -f "/var/cache/dnf/fedora.solv" ]; then
        # TODO: fedora39 -- /var/cache/dnf/fedora.solv
        cache_fp="/var/cache/dnf/fedora.solv"
    else
        cache_fp="$(___x_cmd_cmds find "/var/cache/libdnf5" -name 'fedora.solv')"
    fi

    [ "$x_" -nt "$cache_fp" ] || {
        ___x_cmd rmrf "$x_"
        ___x_cmd_dnf___repo_lsname > "$x_"
    }
    [ -f "$x_" ]
}

___x_cmd_dnf___haspriv(){
    [ -w "/usr/bin" ] || [ -w "${TERMUX__ROOTFS}/usr/bin" ]
}
