#compdef cordova
# autoload

typeset -A opt_args
local context state line

_cordova() {
  local context state line curcontext="$curcontext"

  if (( CURRENT > 2 )); then
    (( CURRENT-- ))
    shift words
    _call_function - "__cordova_${words[1]}" || _nothing
  else
    __cordova_commands
  fi
}


__cordova_commands() {
  local context state line curcontext="$curcontext"

  local -a cordova_options
  __cordova_setup_cordova_options


  _arguments -C \
  $cordova_options \
  ': :->command'

  case "$state" in
    command)
local -a commands

commands=(
  create'[creates a cordova project in the specified PATH]'
  help'[shows this syntax summary]'
  info'[print out useful information helpful for submitting bug reports and getting help.]'
  server'[runs a local web server for www/ assets. Port defaults to 8000.]'
  run'[deploys app on specified (or all) platform devices]'
  prepare'[copies files for specified platforms, or all platforms]'
  compile'[builds the app for specified platforms, or all platforms]'
  build'[shortcut for prepare, then compile]'
  emulate'[deploys app in specified (or all) platform emulator(s)]'
  platform'[add or remove a specified PLATFORM, etc]'
  plugin'[add or remove a plugin from the specified PATH or URI, etc]'

  )


_values 'command' $commands
;;
esac
}

__cordova_plugin() {
  local context state line curcontext="$curcontext"

  if (( CURRENT > 2 )); then
    (( CURRENT-- ))
    shift word
    _call_function - "__cordova_plugin_${words[1]}" || _nothing
  else
    __cordova_plugin_commands
  fi

}

__cordova_plugin_commands (){

 local context state line curcontext="$curcontext"

 local -a cordova_options

 _arguments -C \
 $cordova_options \
 ': :->command'

 case "$state" in
  command)
local -a commands

commands=(
  add'[add platform]'
  {remove,rm}'[remove platform]'
  {list,ls}'[list all currently installed plugins]'
  search'[search the plugin registry for plugins matching the keywords]'
  )

_values 'command' $commands
;;
esac

}


__cordova_platform() {
  local context state line curcontext="$curcontext"

  if (( CURRENT > 2 )); then
    (( CURRENT-- ))
    shift word
    _call_function - "__cordova_platform_${words[1]}" || _nothing
  else
    __cordova_platform_commands
  fi

}

__cordova_platform_commands (){

 local context state line curcontext="$curcontext"

 local -a cordova_options

 _arguments -C \
 $cordova_options \
 ': :->command'

 case "$state" in
  command)
local -a commands

commands=(
  add'[add platform]'
  {remove,rm}'[remove platform]'
  {list,ls}'[list all currently installed plugins]'
  {update,up}'[update the version of cordova]'
  search'[search the plugin registry for plugins matching the keywords]'
  )


_values 'command' $commands
;;
esac

}

__cordova_setup_cordova_options() {
  cordova_options=(
    -d'[debug mode ...]'
    -v'[prints out this utility version]'
    )
}

__cordova_server(){
 __cordova_platform_select
}

__cordova_run(){
  __cordova_platform_select
}

__cordova_prepare(){
 __cordova_platform_select
}

__cordova_compile(){
  __cordova_platform_select
}
__cordova_build(){
  __cordova_platform_select
}
__cordova_emulate(){
  __cordova_platform_select
}

__cordova_platform_select(){
  _values 'platform' 'ios' 'android'
}

_cordova "$@"