# shellcheck shell=dash

___x_cmd_kev_ls(){
    case "$1" in
        -h|--help)
            ___x_cmd help -m kev ls
            return 0
        ;;
    esac

    if ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_manual ; then
        ___x_cmd_kev_ls___app "$@"
    else
        ___x_cmd_kev_ls___csv "$@"
    fi
}

___x_cmd_kev_top(){
    case "$1" in
        -h|--help)
            ___x_cmd help -m kev top
            return 0
        ;;
    esac

    ___x_cmd_kev_ls "${1:-15}"
}


___x_cmd_kev_ls___csv(){
    local n="$1"
    ___x_cmd_kev_ls___raw "$@" | {
        local rline
        read -r rline;
        printf "%s\n" "$rline"
        if [ -n "$n" ]; then
            kev:info "Presenting only top [N=$n] results"
            ___x_cmd_cmds sort -r -t , -k 5 | ___x_cmd_cmds head -n "$n"
        else
            ___x_cmd_cmds sort -r -t , -k 5
        fi
    }
}

___x_cmd_kev_ls___raw(){
    ___x_cmd ccmd 2h -- ___x_cmd curl -s 'https://www.cisa.gov/sites/default/files/csv/known_exploited_vulnerabilities.csv'
}


___x_cmd_kev_ls___app(){
    local ___X_CMD_CSV_APP_DATA_cveID
    local ___X_CMD_CSV_APP_DATA_vendorProject
    local ___X_CMD_CSV_APP_DATA_product
    local ___X_CMD_CSV_APP_DATA_cwes
    local ___X_CMD_CSV_APP_DATA_vulnerabilityName
    local ___X_CMD_CSV_APP_DATA_dateAdded
    local ___X_CMD_CSV_APP_DATA_shortDescription
    local ___X_CMD_CSV_APP_DATA_requiredAction
    local ___X_CMD_CSV_APP_DATA_dueDate
    local ___X_CMD_CSV_APP_DATA_knownRansomwareCampaignUse
    local ___X_CMD_CSV_APP_DATA_notes
    ___X_CMD_CSV_APP_SHBIN_CODE="xrc kev; "             \
        ___x_cmd csv app --return var --clear           \
            --table-view cveID,vendorProject,product    \
            --preview vulnerabilityName,dateAdded,shortDescription,requiredAction,dueDate,knownRansomwareCampaignUse,notes  \
            ___x_cmd_kev_ls___csv "$@" || return 1
    local cveid="$___X_CMD_CSV_APP_DATA_cveID"
    [ -n "$cveid" ] || return 0

    local id=
    kev:info "Select $cveid ==> $___X_CMD_CSV_APP_DATA_vulnerabilityName"
    ___x_cmd ui select id "Next for Vulnerabilities -> $cveid"                                          \
        "View vulnerability information provided by shodan.io"                                          \
        "View vulnerability information provided by osv.dev"                                            \
        "Open the CVE website to view the vulnerability information"                                    \
        "Open the U.S. National Vulnerability Database website to view the vulnerability information"   \
        "return 0"                                                                                      \
    || return 1

    case "$id" in
        1)      ___x_cmd shodan cve info                                        "$cveid" ;;
        2)      ___x_cmd osv vuln --yml                                         "$cveid" ;;
        3)      ___x_cmd open    "https://cve.mitre.org/cgi-bin/cvename.cgi?name=$cveid" ;;
        4)      ___x_cmd open                  "https://nvd.nist.gov/vuln/detail/$cveid" ;;
        *)      return 0 ;;
    esac

    # ___x_cmd_fifo_pipe '___x_cmd_kev_ls___csv "$@"' \
    #     __x_cmd csv app --clear \
    #         --table-view cveID,vendorProject,product \
    #         --preview vulnerabilityName,dateAdded,shortDescription,requiredAction,dueDate,knownRansomwareCampaignUse,notes

}
