#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Usage:
    gitbook clone <book_repo_name>
    gitbook (fetch | make | push) <book_id> [options]
    gitbook get <book_id> [options]
    gitbook update [options]
    gitbook report <book_identity>
    gitbook all BOOKID BOOKIDEND [options]

Arguments:
    <book_repo_name> - The name of a repo in Gitenberg, `Frankenstein_84`

Options:
    -v --logging (debug | info | error)
    --rdf_library <rdr_library>         where are you storing rdf files
"""
import logging
import sys

from docopt import docopt

from gitenberg import Book
from gitenberg import clone
from gitenberg import __version__


def upload_all_books(book_id_start, book_id_end):
    # TODO: move to workflow module

    logging.info(
        "starting a gitbook mass upload: {0} -> {1}".format(
            book_id_start, book_id_end
        )
    )

    for book_id in xrange(int(book_id_start), int(book_id_end)):
        logging.info("--> Beginning {0}".format(book_id))
        book = Book(book_id)

        # if '--rdf_library' in arguments:
        #     rdf_library = arguments['--rdf_library']
        # else:
        #     rdf_library = None

        try:
            book.parse_book_metadata()
        except:
            logging.error(u"Can't parse metadata for this book: {0}".format(book.book_id))
            continue
        book.all()


if __name__ == '__main__':
    logger = logging.getLogger('')
    logging.basicConfig(filename='./log/log.txt', level=logging.DEBUG)

    arguments = docopt(__doc__, version=__version__)

    if '--logging' in arguments:
        log_level = arguments['--logging']
        if log_level == 'debug':
            logger.setLevel(logging.DEBUG)
        elif log_level == 'info':
            logger.setLevel(logging.INFO)
        elif log_level == 'error':
            logger.setLevel(logging.ERROR)

    if '-v' in arguments:
        logger.setLevel(logging.DEBUG)

    if arguments['<book_id>'] is not None:
        book = Book(arguments['<book_id>'])
        if '--rdf_library' in arguments:
            rdf_library = arguments['--rdf_library']
            book.parse_book_metadata(rdf_library)
        else:
            book.parse_book_metadata()

    if arguments['fetch']:
        logging.info("fetching a PG book: {0}".format(arguments['<book_id>']))
        book.fetch()

    elif arguments['make']:
        logging.info("making a local git repo for: {0}".format(arguments['<book_id>']))
        book.make()

    elif arguments['push']:
        logging.info("making a local git repo for: {0}".format(arguments['<book_id>']))
        book.push()

    elif arguments['all']:
        upload_all_books(arguments['BOOKID'], arguments['BOOKIDEND'])

    elif arguments['update']:
        raise NotImplementedError

    elif arguments['report']:
        raise NotImplementedError

    elif arguments['clone']:
        logging.debug("Running 'clone'")

        # TODO: check for stdin
        arg_book_name = arguments['<book_repo_name>']
        if arg_book_name == '-':
            # if reading from stdin, take the first line of stdin
            for repo_name in sys.stdin:
                clone(repo_name.strip('\n'))

        clone(arg_book_name)
