#compdef sandbox

__get_sandboxes() {
  /bin/ls $SANDBOX_ROOT 2> /dev/null
}

__sandboxes() {
  local -a sandboxes
  sandboxes=(${(fo)"$(__get_sandboxes)"})
  _describe 'in' sandboxes
}

_sandbox_cmds() {
  local commands; commands=(
    'create:Create a new sandbox'
    'rename:Rename an existing sandbox'
    'destroy:Destroy an existing sandbox'
    'list:Show all existing sandboxes'
    'enable:Enable an existing sandbox'
    'disable:Disable the current sandbox'
  )
  _describe -t commands 'sandbox command' commands "$@"
}

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

  _arguments -C \
      '1: :_sandbox_cmds' \
      '*::arg:->args'

  case $state in
    (args)
      curcontext="${curcontext%:*:*}:sandbox-cmd-$words[1]:"
      case $line[1] in
        (create|list|disable)
          ;;
        (enable|destroy)
          _arguments -C '1:: :__sandboxes'
          ;;
        (rename)
          _arguments -C '1:: :__sandboxes'
          ;;
      esac
  esac
}

_sandbox "$@"