#compdef balena
#autoload

#GENERATED FILE DON'T MODIFY#

_balena() {
  typeset -A opt_args
  local context state line curcontext="$curcontext"

  # Valid top-level completions
  main_commands=( api-key api-keys app block build config deploy device device devices env envs fleet fleet fleets internal join key key keys leave local login logout logs notes orgs os preload push release release releases scan settings ssh support tag tags tunnel util version whoami )
  # Sub-completions
  api_key_cmds=( generate revoke )
  app_cmds=( create )
  block_cmds=( create )
  config_cmds=( generate inject read reconfigure write )
  device_cmds=( deactivate identify init local-mode move os-update pin public-url purge reboot register rename restart rm shutdown start-service stop-service track-fleet )
  devices_cmds=( supported )
  env_cmds=( add rename rm )
  fleet_cmds=( create pin purge rename restart rm track-latest )
  internal_cmds=( osinit )
  key_cmds=( add rm )
  local_cmds=( configure flash )
  os_cmds=( build-config configure download initialize versions )
  release_cmds=( finalize invalidate validate )
  tag_cmds=( rm set )


  _arguments -C \
    '(- 1 *)--version[show version and exit]' \
    '(- 1 *)'{-h,--help}'[show help options and exit]' \
    '1:first command:_balena_main_cmds' \
    '2:second command:_balena_sec_cmds' \
  && ret=0
}

(( $+functions[_balena_main_cmds] )) ||
_balena_main_cmds() {
  _describe -t main_commands 'command' main_commands "$@" && ret=0
}

(( $+functions[_balena_sec_cmds] )) ||
_balena_sec_cmds() {
  case $line[1] in
      "api-key")
        _describe -t api_key_cmds 'api-key_cmd' api_key_cmds "$@" && ret=0
      ;;
      "app")
        _describe -t app_cmds 'app_cmd' app_cmds "$@" && ret=0
      ;;
      "block")
        _describe -t block_cmds 'block_cmd' block_cmds "$@" && ret=0
      ;;
      "config")
        _describe -t config_cmds 'config_cmd' config_cmds "$@" && ret=0
      ;;
      "device")
        _describe -t device_cmds 'device_cmd' device_cmds "$@" && ret=0
      ;;
      "devices")
        _describe -t devices_cmds 'devices_cmd' devices_cmds "$@" && ret=0
      ;;
      "env")
        _describe -t env_cmds 'env_cmd' env_cmds "$@" && ret=0
      ;;
      "fleet")
        _describe -t fleet_cmds 'fleet_cmd' fleet_cmds "$@" && ret=0
      ;;
      "internal")
        _describe -t internal_cmds 'internal_cmd' internal_cmds "$@" && ret=0
      ;;
      "key")
        _describe -t key_cmds 'key_cmd' key_cmds "$@" && ret=0
      ;;
      "local")
        _describe -t local_cmds 'local_cmd' local_cmds "$@" && ret=0
      ;;
      "os")
        _describe -t os_cmds 'os_cmd' os_cmds "$@" && ret=0
      ;;
      "release")
        _describe -t release_cmds 'release_cmd' release_cmds "$@" && ret=0
      ;;
      "tag")
        _describe -t tag_cmds 'tag_cmd' tag_cmds "$@" && ret=0
      ;;

  esac
}

_balena "$@"
