#!/usr/bin/env python
"""
parse_versa

Tool to parse Versa

"""

import re
import sys
import os
import glob
import time
import argparse
from itertools import islice

import logging

#from amara.thirdparty import httplib2, json
#from amara3.iri import relativize, absolutize

from versa.driver import memory
from versa import VERSA_BASEIRI
from versa.reader.md import from_markdown
from versa import ORIGIN, RELATIONSHIP, TARGET, ATTRIBUTES

def run(inputs=None, base=None, config=None, out=None, verbose=False):
    '''
    See the command line help
    '''
    if verbose:
        logging.basicConfig(level=logging.DEBUG)

    for inf in inputs:
        m = memory.connection(baseuri=base)
        base_out = from_markdown(inf.read(), m, config=config)
        for sid, stmt in m:
            stmt_out = stmt if stmt[ATTRIBUTES] else stmt[:3]
            out.write(repr(stmt_out) + '\n')

    return


# Handle the command-line arguments

#import signal
#import shutil

if __name__ == '__main__':
    #parser = argparse.ArgumentParser(prog="bootstrap", add_help=False)
    parser = argparse.ArgumentParser()
    #parser.add_argument('-o', '--output')
    parser.add_argument('inputs', type=argparse.FileType('r'), metavar='inputs', nargs='+',
                        help='One or more Versa files to be parsed into a single model')
    parser.add_argument('-o', '--out', type=argparse.FileType('w'), default=sys.stdout,
        help='file where output should be written '
             '(default: write to stdout)')
    parser.add_argument('-c', '--config', type=argparse.FileType('r'),
        help='config, a Versa file whose config (in the @docheader) should be used to parse the rest')
    parser.add_argument('-b', '--base', metavar="IRI", #dest="base",
        help='Base IRI to be used for parsing the Versa. Can be overridden by a base statement within the docheader')
    parser.add_argument('-v', '--verbose', action='store_false',
        help='whether or not to show verbose error messages')
    #
    args = parser.parse_args()

    run(inputs=args.inputs, base=args.base, config=args.config, out=args.out, verbose=args.verbose)
    for f in args.inputs: f.close()
    if args.config: args.config.close()
    args.out.close()

