#!python
from __future__ import print_function, unicode_literals

import sys
import optparse
import fileinput

from ynot import *

def get_opts_and_args(argv):
    loglevelchoices = ['DEBUG', 'INFO', 'WARN', 'ERROR']
    optparser = optparse.OptionParser(
        prog = argv[0],
        usage='Usage: %prog [OPTION] -t trafoFile document...',
        description = 'Apply transformation to yaml documents',
        version='%s %s' % ("%prog", __version__)
    )
    optparser.add_option('-t', '--trafo', dest='trafofilename',
        help="File transformation is read from")
    optparser.add_option('-l', '--log-level', type='choice',
        choices=loglevelchoices, dest='loglevel', default=loglevelchoices[1],
        help="Log level. Choices: %s; Defaults to %s" % (loglevelchoices, loglevelchoices[1])
    )
    optparser.add_option('--verify', action='store_true', help="Verify transformator file TRANSFORMATOR")
    optparser.add_option('--dry-run', action='store_true', help="Only validate and verify. No document processing")
    optparser.add_option('--encoding', default='utf-8', help='endoding of input files. Default: [%default]')
    return optparser.parse_args(argv[1:])

def main(argv):
    opts, args = get_opts_and_args(argv)
    logger.setLevel(eval('logging.%s' % opts.loglevel))
    logger.debug("main(%s)" % args)
    logger.setLevel(eval('logging.%s' % opts.loglevel))
    try:
        trafo = Trafo.from_yaml("".join(fileinput.input(opts.trafofilename, openhook=fileinput.hook_encoded(opts.encoding))))
    except VerificationException, e:
        logger.error(e)
        sys.exit(1)
    if not opts.dry_run:
        if len(args) == 0:
            logger.warn("processing stdin")
        Transformation(Node.from_yaml("".join(fileinput.input(args, openhook=fileinput.hook_encoded(opts.encoding)))), trafo).transform()

if __name__ == "__main__":
    main(sys.argv)
