#!/usr/bin/python
# -*- coding: utf-8 -*-
#
#       Copyright (C) 2008 Simonenko Sergey <gforgx@gmail.com>
#
#       Redistribution and use in source and binary forms, with or without
#       modification, are permitted provided that the following conditions are
#       met:
#
#       * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#       * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following disclaimer
#       in the documentation and/or other materials provided with the
#       distribution.
#       * Neither the name of the  nor the names of its
#       contributors may be used to endorse or promote products derived from
#       this software without specific prior written permission.
#
#       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#       LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#       A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
#       OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
#       DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
#       THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#       OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import sys
import getopt

from notefinderlib.libnotetaking import *

# Notebook initializing
notebook = Notebook(config.getNotebook())

# Functions
def help(x):
    """ Display help message """
    print '-h\tdisplay this help message\n\
-l\tlist all notes in a notebook\n\
-n\toutput entry text to console\n\
-a\tadd entry with given title to a notebook\n\
-d\tdelete entry from a notebook\n\
-s\tset current notebook\n'

def list(x):
    """ List all notes in notebook """
    print '\n'.join(notebook.notes())

def note(entry):
    """ Output entry text to console """
    if notebook.has(entry):
        print notebook.get(entry)

def add(entry):
    """ Add entry with given title to the notebook """
    notebook.add(entry, raw_input())

def delete(entry):
    """ Delete entry from the notebook """
    if raw_input('Are you sure? [Y/n]\n') in ('Y', 'y'):
        if notebook.has(entry):
            notebook.delete(entry)

def set_notebook(book):
    """ Sets current notebook """
    if book in config.getNotebooks():
        config.setDefault(book)

# Binding actions
actions = {
    '-h' : help,
    '-l'  : list,
    '-n' : note,
    '-a' : add,
    '-d' : delete,
    '-s' : set_notebook,
}

# Parsing CLI options/arguments
try:

    opts, args = getopt.getopt(sys.argv[1:], 'hln:a:d:s:', [])

    for i in opts:
        actions[i[0]](i[1])

    for i in args:
        note(i)

except Exception, err:
    print err
    help(0)