#compdef bb

# Black Belt autocompletion for oh-my-zsh
# Requires: BlackBelt installed http://black-belt.readthedocs.org/en/latest/
# Author: Ladislav Prskavec (ladislav@prskavec.net)

# ----- Commands
# Seperate function for each command, makes extension easier later
# ---------------------------
__gh() {
    local -a subcommands
    subcommands=(
      'pr:Create PR'
      'deploy:Deploy PR'
      'merge:Merge PR'
    )
    _describe -t commands 'bb gh' subcommands
    _arguments \
        '--help[Show help message and exit.]'
}

__hip() {
    local -a subcommands
    subcommands=(
      'last_errors'
      'post'
    )
    _describe -t commands 'bb hip' subcommands
    _arguments \
        '--help[Show help message and exit.]'
}

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

  _arguments -C \
    ':commands:->command' \
    '*::options:->options'

  case $state in
    (command)
      local -a subcommands
      subcommands=(
        'curcard:Open current doing card in browser'
        'migrate-label:Usage:: bb t migrate-label --label="Product:...'
        'next:Takes the top card from To Do queue, moves it...'
        'next-week:Create new columns on the :term:`Work Board`:...'
        'schedule-list:Usage:: bb t schedule-list...'
        'verify:Looks through a checklists on :term:`Story`,...'
      )
      _describe -t commands 'bb t' subcommands
      _arguments \
          '--help[Show help message and exit.]'
    ;;
    (options)
      case $line[1] in
        (migrate-label)
          _arguments \
          '---label[Label to migrate away]' \
          '--board[Board to migrate from]' \
          '--board-to[Board to migrate to]' \
          '--column[Column to migrate from]' \
          '--column-to[Column to migrate to]'
          ;;
        (schedule-list)
          _arguments \
          '---label[Assign a label to the newly-created card. For now, label must be a color name.]' \
          '--owner[Whom to assign a created work card]' \
          '--story-list[Name of the list that should be converted to cards]'
          ;;
      esac
    ;;
  esac
}

local -a _1st_arguments
_1st_arguments=(
  "gh":"Handle github-related tasks and integrations."
  "hip":"Handle HipChat-related tasks and..."
  "init":"Initialize application for usage."
  "stage":"Deploy current branch to staging"
  "t":"Handle Trello-related actions and..."
  "version":"Version"
)

_arguments '*:: :->command'

if (( CURRENT == 1 )); then
    _describe -t commands "bb command" _1st_arguments
    return
fi

local -a _command_args
case "$words[1]" in
    gh)
       __gh ;;
    t)
       __t ;;
    hip)
      __hip ;;
esac

