#compdef nvram

local ret=1
local -a context line state state_descr tmp
local -A opt_args val_args

# Note: -x can only be used with -f/-p, but must be used first to have effect
_arguments -s : \
  '(: -)-c[delete all NVRAM variables]' \
  '(: -)-d[delete specified NVRAM variable]: :->variables-ro' \
  '(: -)-f[set NVRAM variables from file]: :_files' \
  '(: -)-p[print all NVRAM variables]' \
  '(-c -d)-x[use XML format for input and output]' \
  '(-)*: :->variables-rw' \
&& ret=0

[[ $state == variables-* ]] && {
  tmp=( ${${(f)"$( _call_program variables $words[1] -p )"}%%[[:space:]]*} )

  [[ $state == variables-rw ]] &&
  tmp=( ${^tmp}'::NVRAM variable value' )

  if (( $#tmp )); then
    _values -w 'NVRAM variable' $tmp && ret=0
  else
    _message 'NVRAM variable' && ret=0
  fi
}

return ret
