#compdef systemd-inhibit

_systemd_inhibit_command(){
    if (( CURRENT == 1 )); then
        compset -q
        _normal
    else
        local n=${words[(b:2:i)[^-]*]}
        if (( n <= CURRENT )); then
            compset -n $n
            _alternative \
                'files:file:_files' \
                'commands:command:_normal' && return 0
        fi
        _default
    fi
}

_inhibit_what() {
    local _inhibit
    _inhibit=(shutdown sleep idle handle-power-key handle-suspend-key handle-hibernate-key handle-lid-switch)
    _values -s : "${_inhibit[@]}"
}

_arguments \
    {-h,--help}'[Show this help]' \
    '--version[Show package version]' \
    '--what=[Operations to inhibit]:options:_inhibit_what' \
    '--who=[A descriptive string who is inhibiting]:who is inhibiting:' \
    '--why=[A descriptive string why is being inhibited]:reason for the lock:' \
    '--mode=[One of block or delay]:lock mode:( block delay )' \
    '--list[List active inhibitors]' \
    '*:commands:_systemd_inhibit_command'
