#compdef dbus-cli

local count="$#words"
local opts=0

for word in $words[2,-2] ; do
  case $word in
    -*)
      (( opts += 1 ))
      ;;
    *)
      break
      ;;
  esac
done

if (( opts == count - 2 )) ; then
  if [[ $words[-1] = -* ]] ; then
    _arguments -C \
	  {-a,--all}'[Equivalent to -e -s -t -u]' \
	  {-e,--empty}'[Also show empty services/objects]' \
	  {-h,--help}'[Print help]' \
      {-s,--signals}'[Print signals]' \
      {-t,--activatables}'[Also show activatables services]' \
      {-u,--unnamed}'[Also show unnamed services]' \
	  {-y,--system-bus}'[Use system bus]'
    return
  fi
fi

case $((count - 2 - $opts)) in
  0)
    _message "service"
    ;;
  1)
    _message "object"
    ;;
  2)
    _message "method"
    ;;
  *)
    _wanted file expl "`dbus-cli -c $words[2,-2]`" _files
    return
esac

compadd `dbus-cli -c $words[2,-2]`

return
