# shellcheck shell=sh        disable=SC2039,SC1090,SC3043,SC2263
# x-cmd cwe lib/la/_index — `x cwe ls` subcommand.
#
# Streams every cached CWE row. TTY → fzf picker; pipe → TSV.
# Auto-refreshes the cache if older than 30 days.
#
# Output modes: --yml (default), --tsv, --csv, --json, --table, fz.
#
# Helpers live alongside this file:
#   la/stream   — TSV emission + freshness check
#   la/fmt      — yml/json/csv/table formatters
#   fz/_index   — actual fzf picker

xrc:mod:lib     cwe         data/_index la/stream la/fmt

# TTY-aware auto dispatch. Mirrors `x cve ls` behavior.
___x_cmd_cwe_la_auto(){
    if [ -t 1 ]; then
        ___x_cmd_cwe_fz
    else
        ___x_cmd_cwe_la_stream_tsv
    fi
}

# Main dispatcher. By default `x cwe ls` == `x cwe ls --all`.
___x_cmd_cwe_la(){
    local mode=auto
    local refresh=1

    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m cwe ls "$@" ; return 0 ;;
            --all|-a)       ;;                          # accepted, default
            --no-refresh)   refresh=0 ;;
            --yml)          mode=yml ;;
            --tsv)          mode=tsv ;;
            --csv)          mode=csv ;;
            --json)         mode=json ;;
            --table)        mode=table ;;
            fz|--fz)        mode=fz ;;
            --tag)          shift; X_CMD_CWE_TAG="$1" ;;
            *)              cwe:warn "ignoring arg: $1" ;;
        esac
        shift
    done

    # Sanity refresh: pull the catalog if it's missing or stale.
    [ "$refresh" = 1 ] && ___x_cmd_cwe_la_refresh_recent

    case "$mode" in
        auto)        ___x_cmd_cwe_la_auto ;;
        fz)          ___x_cmd_cwe_fz ;;
        yml)         ___x_cmd_cwe_la_stream_tsv | ___x_cmd_cwe_la_fmt_yml ;;
        json)        ___x_cmd_cwe_la_stream_tsv | ___x_cmd_cwe_la_fmt_json ;;
        csv)         ___x_cmd_cwe_la_stream_tsv | ___x_cmd_cwe_la_fmt_csv ;;
        table)       ___x_cmd_cwe_la_stream_tsv | ___x_cmd_cwe_la_fmt_table ;;
        tsv|*)       ___x_cmd_cwe_la_stream_tsv ;;
    esac
}