# shellcheck shell=dash disable=SC2154,2034

___x_cmd_shodan_dns_domain(){
    local X_help_cmd='x help -m shodan dns domain';   help:arg-null:parse
    shodan:arg:format:all

    local domain="$1";  [ -n "$domain" ] ||  N=shodan M="Provide a domain" log:ret:64
    shodan:info "Get all the subdomains and other DNS entries for the given [domain=${domain}]"

    "___x_cmd_shodan_dns_domain___${format}"
}

___x_cmd_shodan_dns_domain___app(){
    local data; data=$( ___x_cmd_shodan_dns_domain___csv )     || shodan:data:ret

    local ___X_CMD_CSV_APP_DATA_Value=
    local ___X_CMD_CSV_APP_DATA_Type=
    local ___X_CMD_CSV_APP_DATA_Ports=
    local ___X_CMD_CSV_APP_DATA_Subdomain=
    local ___X_CMD_CSV_APP_DATA_Last_seen=

    ___x_cmd_pipevar data  x csv app --return var

    [ -n "$___X_CMD_CSV_APP_DATA_Value" ] || return 0
    printf "Value: %s\n"          "$___X_CMD_CSV_APP_DATA_Value"
    printf "Type: %s\n"           "$___X_CMD_CSV_APP_DATA_Type"
    printf "Ports: %s\n"          "$___X_CMD_CSV_APP_DATA_Ports"
    printf "Subdomain: %s\n"      "$___X_CMD_CSV_APP_DATA_Subdomain"
    printf "Last_seen: %s\n"      "$___X_CMD_CSV_APP_DATA_Last_seen"

}

___x_cmd_shodan_dns_domain___csv(){
    local data; data=$( ___x_cmd_shodan_dns_domain___json )     || shodan:data:ret
    ___x_cmd_pipevar data ___x_cmd_shodan_dns_domain___parse_json2csv
}

___x_cmd_shodan_dns_domain___tsv(){
    local data; data=$( ___x_cmd_shodan_dns_domain___csv )      || shodan:data:ret
    ___x_cmd_pipevar data
}

___x_cmd_shodan_dns_domain___json(){
    local data; data="$( ___x_cmd_shodan_dns_domain___raw )"    || shodan:data:ret
    local error
    ___x_cmd_pipevar data   x jo env . .error   # Consider whether we should take the data
    [ -z "$error" ] || shodan:data:ret
    ___x_cmd_pipevar data
}

___x_cmd_shodan_dns_domain___raw(){
    ___x_cmd_shodan_ourl get "/dns/domain/${domain}"
}

# Section: parse

___x_cmd_shodan_dns_domain___parse_json2csv(){
    local data
    local error
    x jo env . .data .error
    [ -z "$error" ] || N=shodan M="$error" log:ret:1
    printf "%s" "$data" | x ja 2c .value .type .ports .subdomain .last_seen |\
        x csv awk '{print cval(1)","cval(2)",""\""juq(cval(3))"\""","cval(4)","cval(5)}' |\
        x csv header --add  Value Type Ports Subdomain  Last_seen
}

# EndSection
