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

Tool to parse Versa

"""

import sys
import argparse

import logging

from versa.driver.memory import newmodel
from versa.serial.literate import parse
from versa.util import jsondump


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

    m = newmodel(baseiri=base)
    for inf in inputs:
        base_out = parse(inf.read(), m, config=config)
        #for sid, link in m:
        #    link_out = link if link[ATTRIBUTES] else link[:3]
        #    out.write(repr(link_out) + '\n')
    jsondump(m, out)

    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()

