#compdef hostnamectl
# SPDX-License-Identifier: LGPL-2.1-or-later

(( $+functions[_hostnamectl_hostname] )) ||
_hostnamectl_hostname() {
    if (( CURRENT <= 3 )); then
        _message "new hostname"
    else
        _message "no more options"
    fi
}

(( $+functions[_hostnamectl_icon-name] )) ||
_hostnamectl_icon-name() {
    if (( CURRENT <= 3 )); then
        _message "new icon name"
    else
        _message "no more options"
    fi
}

(( $+functions[_hostnamectl_chassis] )) ||
_hostnamectl_chassis() {
    if (( CURRENT <= 3 )); then
        _chassis=( desktop laptop convertible server tablet handset watch embedded vm container )
        _describe chassis _chassis
    else
        _message "no more options"
    fi
}

(( $+functions[_hostnamectl_deployment] )) ||
_hostnamectl_deployment() {
    if (( CURRENT <= 3 )); then
        _message "new environment"
    else
        _message "no more options"
    fi
}

(( $+functions[_hostnamectl_location] )) ||
_hostnamectl_location() {
    if (( CURRENT <= 3 )); then
        _message "new location"
    else
        _message "no more options"
    fi
}

(( $+functions[_hostnamectl_commands] )) ||
_hostnamectl_commands() {
    local -a _hostnamectl_cmds
    _hostnamectl_cmds=(
        "status:Show current hostname settings"
        "hostname:Get/set system hostname"
        "icon-name:Get/set icon name for host"
        "chassis:Get/set chassis type for host"
        "deployment:Get/set deployment environment for host"
        "location:Get/set location for host"
    )
    if (( CURRENT == 1 )); then
        _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@"
    else
        local curcontext="$curcontext"
        cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}"
        if (( $#cmd )); then
            if [[ $cmd == status ]]; then
                _message "no options"
            else
                _hostnamectl_$cmd
            fi
        else
            _message "unknown hostnamectl command: $words[1]"
        fi
    fi
}

(( $+functions[_hostnamectl_get_json] )) || _hostnamectl_get_json()
{
    local -a _json_forms
    _json_forms=( $(hostnamectl --json=help 2>/dev/null) )
    _values 'format' $_json_forms
}

_arguments -s \
    {-h,--help}'[Show this help]' \
    '--version[Show package version]' \
    '--transient[Only set transient hostname]' \
    '--static[Only set static hostname]' \
    '--pretty[Only set pretty hostname]' \
    '--no-ask-password[Do not prompt for password]' \
    {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
    {-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
    '--json[Shows output formatted as JSON]:format:_hostnamectl_get_json' \
    '*::hostnamectl commands:_hostnamectl_commands'
