# bash completion for experts
_experts_node() {
  subs=""; flags=""; pos=""
  case "$1" in
    "") subs="api config courses events login logout stats status update whoami"; flags="--help -h --version -v"; pos="" ;;
    "api") subs=""; flags="--method -X --field -f --raw-field -F --header -H --input --include -i --paginate --silent --help -h"; pos="" ;;
    "config") subs=""; flags="--api-url --json --help -h"; pos="" ;;
    "courses") subs=""; flags="--search --limit --page --json --help -h"; pos="" ;;
    "events") subs=""; flags="--search --limit --page --json --help -h"; pos="" ;;
    "login") subs=""; flags="--token --browser --no-browser --help -h"; pos="" ;;
    "logout") subs=""; flags="--yes -y --help -h"; pos="" ;;
    "stats") subs="incidents"; flags="--help -h"; pos="" ;;
    "stats incidents") subs=""; flags="--output -o --json --help -h"; pos="" ;;
    "status") subs=""; flags="--json --help -h"; pos="" ;;
    "update") subs=""; flags="--check --help -h"; pos="" ;;
    "whoami") subs=""; flags="--json --help -h"; pos="" ;;
  esac
}
_experts_values() {
  values=""
  case "$1|$2" in
    "api|--method") values=""; return 0 ;;
    "api|-X") values=""; return 0 ;;
    "api|--field") values=""; return 0 ;;
    "api|-f") values=""; return 0 ;;
    "api|--raw-field") values=""; return 0 ;;
    "api|-F") values=""; return 0 ;;
    "api|--header") values=""; return 0 ;;
    "api|-H") values=""; return 0 ;;
    "api|--input") values=""; return 0 ;;
    "config|--api-url") values=""; return 0 ;;
    "courses|--search") values=""; return 0 ;;
    "courses|--limit") values=""; return 0 ;;
    "courses|--page") values=""; return 0 ;;
    "events|--search") values=""; return 0 ;;
    "events|--limit") values=""; return 0 ;;
    "events|--page") values=""; return 0 ;;
    "login|--token") values=""; return 0 ;;
    "stats incidents|--output") values="table json csv"; return 0 ;;
    "stats incidents|-o") values="table json csv"; return 0 ;;
  esac
  return 1
}
_experts_complete() {
  local cur prev path="" word i subs flags pos values
  cur="${COMP_WORDS[COMP_CWORD]}"
  prev="${COMP_WORDS[COMP_CWORD-1]}"
  # Walk the words typed so far down the command tree.
  for (( i = 1; i < COMP_CWORD; i++ )); do
    word="${COMP_WORDS[i]}"
    [[ "$word" == -* ]] && continue
    _experts_node "$path"
    if [[ " $subs " == *" $word "* ]]; then
      path="${path:+$path }$word"
    fi
  done
  if _experts_values "$path" "$prev"; then
    COMPREPLY=( $(compgen -W "$values" -- "$cur") )
    return
  fi
  _experts_node "$path"
  if [[ "$cur" == -* ]]; then
    COMPREPLY=( $(compgen -W "$flags" -- "$cur") )
  else
    COMPREPLY=( $(compgen -W "$subs $pos" -- "$cur") )
  fi
}
complete -F _experts_complete experts
