#compdef storm-cli

autoload -U is-at-least

_storm-cli() {
    typeset -A opt_args
    typeset -a _arguments_options
    local ret=1

    if is-at-least 5.2; then
        _arguments_options=(-s -S -C)
    else
        _arguments_options=(-s -C)
    fi

    local context curcontext="$curcontext" state line
    _arguments "${_arguments_options[@]}" \
'-S+[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'--storm=[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'-C+[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'--chat=[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'-L+[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'--lnp=[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'-h[Print help information]' \
'--help[Print help information]' \
'-V[Print version information]' \
'--version[Print version information]' \
'*-v[Set verbosity level]' \
'*--verbose[Set verbosity level]' \
":: :_storm-cli_commands" \
"*::: :->storm-cli" \
&& ret=0
    case $state in
    (storm-cli)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:storm-cli-command-$line[1]:"
        case $line[1] in
            (chat-listen)
_arguments "${_arguments_options[@]}" \
'--connect=[Remote node address to force connection (re)establishment]:CONNECT: ' \
'-S+[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'--storm=[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'-C+[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'--chat=[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'-L+[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'--lnp=[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'-h[Print help information]' \
'--help[Print help information]' \
'*-v[Set verbosity level]' \
'*--verbose[Set verbosity level]' \
':peer -- Remote node id (public key):' \
&& ret=0
;;
(chat-send)
_arguments "${_arguments_options[@]}" \
'--connect=[Remote node address to force connection (re)establishment]:CONNECT: ' \
'-S+[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'--storm=[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'-C+[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'--chat=[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'-L+[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'--lnp=[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'-h[Print help information]' \
'--help[Print help information]' \
'*-v[Set verbosity level]' \
'*--verbose[Set verbosity level]' \
':peer -- Remote node id (public key):' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'-S+[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'--storm=[ZMQ socket for connecting Storm node RPC interface]:STORM_ENDPOINT: ' \
'-C+[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'--chat=[ZMQ socket for chat daemon PUB/SUB API]:RADIO_ENDPOINT: ' \
'-L+[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'--lnp=[ZMQ socket for connecting LNP node RPC interface]:LNP_ENDPOINT: ' \
'*-v[Set verbosity level]' \
'*--verbose[Set verbosity level]' \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
        esac
    ;;
esac
}

(( $+functions[_storm-cli_commands] )) ||
_storm-cli_commands() {
    local commands; commands=(
'chat-listen:' \
'chat-send:' \
'help:Print this message or the help of the given subcommand(s)' \
    )
    _describe -t commands 'storm-cli commands' commands "$@"
}
(( $+functions[_storm-cli__chat-listen_commands] )) ||
_storm-cli__chat-listen_commands() {
    local commands; commands=()
    _describe -t commands 'storm-cli chat-listen commands' commands "$@"
}
(( $+functions[_storm-cli__chat-send_commands] )) ||
_storm-cli__chat-send_commands() {
    local commands; commands=()
    _describe -t commands 'storm-cli chat-send commands' commands "$@"
}
(( $+functions[_storm-cli__help_commands] )) ||
_storm-cli__help_commands() {
    local commands; commands=()
    _describe -t commands 'storm-cli help commands' commands "$@"
}

_storm-cli "$@"
