#compdef fossil

function _fossil_get_command_list () {
  fossil help -a | grep -v "Usage|Common|This is"
}

function _fossil () {
  local context state state_descr line
  typeset -A opt_args

  _arguments \
    '1: :->command'\
    '2: :->subcommand'

  case $state in
    command)
      local _OUTPUT=$(fossil branch 2>&1 | grep "use --repo")
      if [[ -z "$_OUTPUT" ]]; then
        compadd "$(_fossil_get_command_list)"
      else
        compadd clone init import help version
      fi ;;
    subcommand)
      case "$words[2]" in
      help) compadd "$(_fossil_get_command_list)" ;;
      add) compadd "$(fossil extra)" ;;
      *) compcall -D ;;
      esac ;;
  esac
}

_fossil "$@"