#compdef geeknote

# Geeknote Autocomplete plugin for Zsh
# Requires: Geeknote installed
# Author : Ján Koščo (@s7anley)

__login() {
    # no arguments
}

__logout() {
    _arguments \
        '--force[Do not ask about logging out.]'
}

__settings() {
    _arguments \
        "--editor+[Set the editor, which use to edit and create notes.]::"
}

__create() {
    _arguments \
        '--title+[The note title.]::' \
        '--content+[The note content.]::' \
        '--tags+[One tag or the list of tags which will be added to the note.]::' \
        '--notebook+[Set the notebook where to save note.]::' \
        '--resource+[Add a resource to the note.]::'
}

__edit() {
    _arguments \
        '--note+[The name or ID from the previous search of a note to edit.]::' \
        '--title+[Set new title of the note.]::' \
        '--content+[Set new content of the note.]::' \
        '--tags+[Set new list o tags for the note.]::' \
        '--notebook+[Assign new notebook for the note.]::' \
        '--resource+[Add a resource to the note.]::'
}

__find() {
    _arguments \
        '--search+[Text to search.]::' \
        '--tags+[Notes with which tag/tags to search.]::' \
        '--notebook+[In which notebook search the note.]::' \
        '--date+[Set date in format dd.mm.yyyy or date range dd.mm.yyyy-dd.mm.yyyy.]::' \
        '--count+[How many notes show in the result list.]::' \
        '--with-url[Add direct url of each note in results to Evernote web-version.]' \
        '--content-search[Search by content, not by title.]' \
        '--exact-entry[Search for exact entry of the request.]'
}

__show() {
    _arguments \
        '--note+[The name or ID from the previous search of a note to show.]::' \
        '--raw[Show the raw note body.]'
}

__remove() {
    _arguments \
        '--note+[The name or ID from the previous search of a note to remove.]::' \
        '--force[Do not ask about removing.]'
}

__notebook-list() {
    # no arguments
}

__notebook-create() {
    _arguments \
        '--title+[Set the title of new notebook.]::'
}

__notebook-edit() {
    _arguments \
        '--title+[Set the title of new notebook.]::' \
        '--notebook+[The name of a notebook to rename.]::'
}

__tag-list() {
    # no arguments
}

__tag-create() {
    _arguments \
        '--title+[Set the title of new tag.]::'
}

__tag-edit() {
    _arguments \
        '--tagname+[The name of a tag to rename.]::' \
        '--title+[Set the new name of tag.]::'
}

__user() {
    _arguments \
        '--full[Show full information.]'
}

local -a _1st_arguments
_1st_arguments=(
    'login':'Authorize in Evernote.'
    'logout':'Logout from Evernote.'
    'settings':'Show and edit current settings.'
    'create':'Create note in Evernote.'
    'edit':'Edit note in Evernote.'
    'find':'Search notes in Evernote.'
    'show':'Output note in the terminal.'
    'remove':'Remove note from Evernote.'
    'notebook-list':'Show the list of existing notebooks in your Evernote.'
    'notebook-create':'Create new notebook.'
    'notebook-edit':'Edit/rename notebook.'
    'tag-list':'Show the list of existing tags in your Evernote.'
    'tag-create':'Create new tag.'
    'tag-edit':'Edit/rename tag.'
    'user':'Show information about active user.'
)

_arguments '*:: :->command'

if (( CURRENT == 1 )); then
    _describe -t commands "geeknote command" _1st_arguments
    return
fi

local -a _command_args
case "$words[1]" in
    login)
       __login ;;
    logout)
        __logout ;;
    settings)
        __settings ;;
    create)
        __create ;;
    edit)
        __edit ;;
    find)
        __find ;;
    show)
        __show ;;
    remove)
        __remove ;;
    notebook-list)
        __notebook-list ;;
    notebook-create)
        __notebook-create ;;
    notebook-edit)
        __notebook-edit ;;
    tag-list)
        __tag-list ;;
    tag-create)
        __tag-create ;;
    tag-edit)
        __tag-edit ;;
    user)
        __user ;;
esac