# bash completion for nslookup                             -*- shell-script -*-

_bind_queryclass()
{
    COMPREPLY+=($(compgen -W 'IN CH HS ANY' -- "$cur"))
}

_bind_querytype()
{
    # https://en.wikipedia.org/wiki/List_of_DNS_record_types
    # Resource records
    local -a types=(
        A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME CSYNC DHCID DLV DNAME
        DNSKEY DS EUI48 EUI64 HINFO HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC
        NSEC3 NSEC3PARAM OPENPGPKEY PTR RRSIG RP SIG SMIMEA SOA SRV SSHFP TA
        TKEY TLSA TSIG TXT URI ZONEMD SVCB HTTPS
    )
    # Other types/pseudo record types
    types+=(AXFR IXFR OPT)
    # Selected obsolete record types
    types+=(SPF)

    COMPREPLY+=($(compgen -W '${types[@]}' -- "$cur"))
}

_nslookup()
{
    local cur prev words cword
    _init_completion -n = || return

    case $cur in
        -class=* | -cl=*)
            cur=${cur#*=}
            _bind_queryclass
            return
            ;;
        -querytype=* | -type=* | -q=* | -ty=*)
            cur=${cur#*=}
            _bind_querytype
            return
            ;;
        -?*=*)
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '-all -class= -debug -nodebug -d2 -nod2
            -domain= -search -nosearch -port= -querytype= -recurse -norecurse
            -retry= -timeout= -vc -novc -fail -nofail' -- "$cur"))
        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
        return
    fi

    local args
    _count_args =
    if ((args <= 2)); then
        _known_hosts_real -- "$cur"
        [[ $args -eq 1 && $cur == @(|-) ]] && COMPREPLY+=(-)
    fi
} &&
    complete -F _nslookup nslookup

_host()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        -c)
            _bind_queryclass
            return
            ;;
        -t)
            _bind_querytype
            return
            ;;
        -m)
            COMPREPLY=($(compgen -W 'trace record usage' -- "$cur"))
            return
            ;;
        -N | -R | -W)
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
        return
    fi

    local args
    _count_args "" "-*[ctmNRW]"
    if ((args == 1)); then
        _known_hosts_real -- "$cur"
    elif ((args == 2)); then
        local ipvx
        [[ ${words[*]} =~ \ -[^\ ]*([46]) ]] && ipvx=-${BASH_REMATCH[1]}
        _known_hosts_real ${ipvx-} -- "$cur"
    fi
} &&
    complete -F _host host

# ex: filetype=sh
