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

(( $+functions[__machinectl_get_machines] )) ||
    __machinectl_get_machines () {
        machinectl --no-legend list-images | {while read -r a b; do echo $a; done;}
    }

(( $+functions[_machinectl_machines] )) ||
    _machinectl_machines() {
        local -a _machines
        _machines=("${(fo)$(__machinectl_get_machines)}")
        typeset -U _machines
        if [[ -n "$_machines" ]]; then
            _describe 'machines' _machines
        else
            _message 'no machines'
        fi
    }

(( $+functions[_machinectl_commands] )) || _machinectl_commands()
{
    local -a _machinectl_cmds
    _machinectl_cmds=(
        "list:List currently running VMs/containers"
        "status:Show VM/container status"
        "show:Show properties of one or more VMs/containers"
        "start:Start container as a service"
        "stop:Stop container (equal to poweroff)"
        "login:Get a login prompt on a VM/container"
        "shell:Invoke a shell (or other command) in a container"
        "enable:Enable automatic container start at boot"
        "disable:Disable automatic container start at boot"
        "poweroff:Power off one or more VMs/containers"
        "reboot:Reboot one or more VMs/containers"
        "terminate:Terminate one or more VMs/containers"
        "kill:Send signal to process or a VM/container"
        "copy-to:Copy files from the host to a container"
        "copy-from:Copy files from a container to the host"
        "bind:Bind mount a path from the host into a container"

        "list-images:Show available container and VM images"
        "image-status:Show image details"
        "show-image:Show properties of image"
        "clone:Clone an image"
        "rename:Rename an image"
        "read-only:Mark or unmark image read-only"
        "remove:Remove an image"

        "pull-tar:Download a TAR container image"
        "pull-raw:Download a RAW container or VM image"
        "list-transfers:Show list of downloads in progress"
        "cancel-transfer:Cancel a download"
    )

    if (( CURRENT == 1 )); then
        _describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@"
    else
        local curcontext="$curcontext"
        cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}"
        if (( $#cmd )); then
            if (( CURRENT == 2 )); then
                case $cmd in
                    list*|cancel-transfer|pull-tar|pull-raw)
                        msg="no options" ;;
                    clone)
                        _machinectl_machines ;;
                    start)
                        _machinectl_machines ;;
                    *)
                        _sd_machines
                esac
            else
                case $cmd in
                    copy-to|copy-from|bind)
                        _files ;;
                    *) msg="no options"
                esac
            fi
        else
            _message "no more options"
        fi
    fi
}

_arguments \
    {-h,--help}'[Prints a short help text and exits.]' \
    '--version[Prints a short version string and exits.]' \
    '--no-pager[Do not pipe output into a pager.]' \
    '--no-legend[Do not show the headers and footers.]' \
    '--no-ask-password[Do not ask for system passwords.]' \
    {-H+,--host=}'[Operate on remote host.]:userathost:_sd_hosts_or_user_at_host' \
    {-M+,--machine=}'[Operate on local container.]:machine:_sd_machines' \
    {-p+,--property=}'[Limit output to specified property.]:property:(Name Id Timestamp TimestampMonotonic Service Scope Leader Class State RootDirectory)' \
    {-a,--all}'[Show all properties.]' \
    {-q,--quiet}'[Suppress output.]' \
    {-l,--full}'[Do not ellipsize cgroup members.]' \
    '--kill-who=[Who to send signal to.]:killwho:(leader all)' \
    {-s+,--signal=}'[Which signal to send.]:signal:_signals' \
    '--read-only[Create read-only bind mount.]' \
    '--mkdir[Create directory before bind mounting, if missing.]' \
    {-n+,--lines=}'[Number of journal entries to show.]:integer' \
    {-o+,--output=}'[Change journal output mode.]:output modes:_sd_outputmodes' \
    '--verify=[Verification mode for downloaded images.]:verify:(no checksum signature)' \
    '--force[Download image even if already exists.]' \
    '*::machinectl command:_machinectl_commands'
