#compdef sandbox

__sandboxes() {
  local -a sandboxes
  sandboxes=(${(fo)"$(ls $SANDBOX_ROOT 2> /dev/null)"})
  _describe 'in' sandboxes
}

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

  _arguments -C \
      '1: :->cmd' \
      '*:: :->args'

  case $state in
    (cmd)
      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 "$@"
      ;;

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

_sandbox "$@"