#compdef resolvectl systemd-resolve
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.

(( $+functions[_resolvectl_protocols] )) ||
    _resolvectl_protocols() {
        local -a _protocol
        _protocol=( $(_call_program protocol ${service} --legend=no --protocol help; echo help) )
        _values 'protocol' "$_protocol[@]"
    }

(( $+functions[_resolvectl_types] )) ||
    _resolvectl_types() {
        local -a _type
        _type=( $(_call_program type ${service} --legend=no --type help; echo help) )
        _values 'type' "$_type[@]"
    }

(( $+functions[_resolvectl_classes] )) ||
    _resolvectl_classes() {
        local -a _class
        _class=( $(_call_program class ${service} --legend=no --class help; echo help) )
        _values 'class' "$_class[@]"
    }

(( $+functions[_resolvectl_commands] )) ||
    _resolvectl_commands() {
    local -a _resolvectl_cmds
    _resolvectl_cmds=(
        default-route:"Configure per-interface default-route setting"
        dns:"Configure per-interface DNS configuration"
        dnsovertls:"Configure per-interface dnsovertls enabled status"
        dnssec:"Configure per-interface dnssec enabled status"
        domain:"Configure per-interface search and route-only domains"
        flush-caches:"Flushes all DNS resource record caches the service maintains locally"
        llmnr:"Configure per-interface llmnr enabled status"
        mdns:"Configure per-interface mdns enabled status"
        nta:"Configure per-interface nta domains"
        openpgp:"Retrieve openpgp keys for an email"
        query:"Resolve domain names, IPv4 and IPv6 addresses"
        reset-server-features:"Flushes all feature level information the resolver has learned about specific servers"
        reset-statistics:"Resets the statistics counter shown in statistics to zero"
        revert:"Revert the per-interfce DNS configuration"
        service:"Resolve DNS-SD and SRV services"
        statistics:"Show resolver statistics"
        status:"Show the global and per-link DNS settings currently in effect"
        tlsa:"Query tlsa public keys stored as TLSA resource records"
    )

    if (( CURRENT == 1 )); then
        _describe -t commands 'resolvectl commands' _resolvectl_cmds
    fi
}

_arguments \
    {-h,--help}'[Print a short help text and exit]' \
    '--version[Print a short version string and exit]' \
    '--legend=no[Do not show headers and footers]' \
    '-4[Resolve IPv4 addresses]' \
    '-6[Resolve IPv6 addresses]' \
    {-i+,--interface=}'[Look on interface]:interface:_net_interfaces' \
    {-p+,--protocol=}'[Look via protocol]:protocol:_resolvectl_protocols' \
    {-t+,--type=}'[Query RR with DNS type]:type:_resolvectl_types' \
    {-c+,--class=}'[Query RR with DNS class]:class:_resolvectl_classes' \
    '--service[Resolve services]' \
    '--service-address=no[Do not resolve address for services]' \
    '--service-txt=no[Do not resolve TXT records for services]' \
    '--cname=no[Do not follow CNAME redirects]' \
    '--search=no[Do not use search domains]' \
    '*::default: _resolvectl_commands'
