# shellcheck shell=dash
# Index subcommand: download and query remote dataset index
# Remote index: https://codeberg.org/x-cmd/data/raw/branch/main/index/dbnomics.index.tsv
# Local cache:  $___X_CMD_ROOT_DATA/data/index/dbnomics.index.tsv

___X_CMD_DBNOMICS_INDEX_URL="https://codeberg.org/x-cmd/data/raw/branch/main/index/dbnomics.index.tsv"
___X_CMD_DBNOMICS_INDEX_CACHE="${___X_CMD_ROOT_DATA}/data/index/dbnomics.index.tsv"

___x_cmd_dbnomics_index(){
    local op="${1:-ls}"
    [ "$#" -gt 0 ] && shift
    case "$op" in
        -h|--help)  ___x_cmd help -m dbnomics index "$@"; return ;;
        generate|gen|update|download)
                        ___x_cmd_dbnomics_index_download "$@" ;;
        ls|list)    ___x_cmd_dbnomics_index_ls "$@" ;;
        *)          N=dbnomics M="Unknown index subcmd -> $op" log:ret:64 ;;
    esac
}

___x_cmd_dbnomics_index_download(){
    local cache="$___X_CMD_DBNOMICS_INDEX_CACHE"
    local dir; dir="$(dirname "$cache")"
    mkdir -p "$dir"
    printf 'Downloading index from %s ...\n' "$___X_CMD_DBNOMICS_INDEX_URL" >&2
    if ___x_cmd curl -sS -L -f "$___X_CMD_DBNOMICS_INDEX_URL" > "$cache"; then
        local total
        total="$(wc -l < "$cache" | awk '{print $1}')"
        printf 'Index saved: %s (%d entries)\n' "$cache" "$total"
    else
        M="Failed to download index" N=dbnomics log:ret:1
    fi
}

___x_cmd_dbnomics_index_ls(){
    local cache="$___X_CMD_DBNOMICS_INDEX_CACHE"
    if [ ! -f "$cache" ]; then
        ___x_cmd_dbnomics_index_download
    fi
    [ -f "$cache" ] || M='Index not available' N=dbnomics log:ret:1

    local q="${1:-}"
    if [ -n "$q" ]; then
        grep -i "$q" "$cache"
    else
        cat "$cache"
    fi
}
