
# Make it ito csv
___x_cmd_dns_ls(){
    [ $# -gt 0 ] ||     set -- --app
    case "$1" in
        -h|--help)      ___x_cmd help -m dns ls ;;
        --json|--yml|\
        --csv|--app)    "___x_cmd_dns_ls_${1#--}" ;;
        *)              N=dns M="No such option ==> $1" log:ret:64
    esac
}

___x_cmd_dns_ls_yml(){
    ___X_CMD_DNS_LS_JSON_FMT=yml ___x_cmd_dns_ls_raw
}

___x_cmd_dns_ls_raw(){
    local x_
    ___x_cmd websrc gitdomain_
    case "$x_" in
        github.com)     x_=https://raw.githubusercontent.com/x-cmd/dns/main/data/X.${___X_CMD_DNS_LS_JSON_FMT:-json}   ;;
        gitee.com)      x_=https://gitee.com/x-cmd/dns/raw/main/data/X.${___X_CMD_DNS_LS_JSON_FMT:-json}    ;;
    esac

    [ -n "$x_" ] || return 1
    ___x_cmd ccmd 10m -- ___x_cmd curl -s "$x_"
}

___x_cmd_dns_ls_app(){
    if ___x_cmd_is_stdout2tty; then
        ___x_cmd_dns_ls_app_ "$@"
    else
        ___x_cmd_dns_ls_csv "$@"
    fi
}

___x_cmd_dns_ls_json(){
    ___x_cmd_dns_ls_raw | ___x_cmd jo .provider
}
___x_cmd_dns_ls_app_(){
    local ___X_CMD_CSV_APP_DATA_url
    local ___X_CMD_CSV_APP_DATA_ipv4
    local ___X_CMD_CSV_APP_DATA_ipv6

    ___X_CMD_CSV_APP_SHBIN_CODE="xrc dns"           \
    ___x_cmd csv app    --return var --clear        \
                        ___x_cmd_dns_ls_csv

    [ -n "$___X_CMD_CSV_APP_DATA_ipv4" ] || return 1
    local ip="${___X_CMD_CSV_APP_DATA_ipv4%,*}"
    local url="$___X_CMD_CSV_APP_DATA_url"

    local id=
    ___x_cmd ui select id "Next:"                       \
        "use shodan measure the latency to an IP"       \
        "use shodan get dns"                            \
        "display the dns information"                   \
        "EXIT"     || return

    case "$id" in
        1)      dns:info "run command => x shodan ping $ip"
               ___x_cmd shodan ping "$ip"
                ;;
        2)      dns:info "run command => x shodan dns $ip"
                ___x_cmd shodan dns "$ip"
                ;;
        3)      ___x_cmd_dns_info --yml  "$ip"
                ;;
        *)      return 0;;
    esac
}

___x_cmd_dns_ls_csv(){
    ___x_cmd_dns_ls_csv_parse \
        |   ___x_cmd csv convert --col   \
        |   ___x_cmd csv header  --add  url ipv4 ipv6
}

___x_cmd_dns_ls_csv_parse(){
    local csvcmd
    csvcmd="$( ___x_cmd_dns_ls_raw | ___x_cmd_dns_gencsvcmd )"
    eval "___x_cmd_dns_ls_raw  $csvcmd" | ___x_cmd csv awk  '
        END{
        for(i=2; i<=CNF; i=i+3){
            a = cval(i+1)
            b = cval(i+2)
            if(a != "null") {a= juq(a); gsub("\"","",a)}
            if(b != "null") {b= juq(b); gsub("\"","",b)}
            if(cval(i) !="") printf("%s %s %s\n", cval(i), a,  b)
            }
        }'
}

___x_cmd_dns_gencsvcmd(){
    ___x_cmd ja -f "$___X_CMD_ROOT_MOD/dns/lib/awk/gen_2csv_cmd.awk"
}
