#compdef dnote

local -a _1st_arguments

_1st_arguments=(
  'add:add a new note'
  'view:list books, notes, or view a content'
  'edit:edit a note or a book'
  'remove:remove a note or a book'
  'find:find notes by keywords'
  'sync:sync data with the server'
  'login:login to the dnote server'
  'logout:logout from the dnote server'
  'version:print the current version'
  'help:get help about any command'
)

get_booknames() {
  local names=$(dnote view --name-only)
  local -a ret

  while read -r line; do
    ret+=("${line}")
  done <<< "$names"

  echo "$ret"
}

if (( CURRENT == 2 )); then
  _describe -t commands "dnote subcommand" _1st_arguments
  return
elif (( CURRENT == 3 )); then
  case "$words[2]" in
    v|view|a|add)
      _alternative \
        "names:book names:($(get_booknames))"
  esac
fi