#!/usr/bin/env python3

import argparse
import os
import sys

import ducktype

if __name__ == '__main__':
    argparser = argparse.ArgumentParser()
    argparser.add_argument('-o', '--output', nargs='?',
                           help='specify the output file or directory')
    argparser.add_argument('files', nargs='+',
                           help='list of input duck files')
    args = argparser.parse_args()
    if args.output is not None:
        if len(args.files) > 1 and not os.path.isdir(args.output):
            sys.stderr.write('Output must be a directory for multiple files\n')
            sys.exit(1)
    for file in args.files:
        try:
            parser = ducktype.DuckParser()
            parser.parse_file(file)
            parser.finish()
        except ducktype.SyntaxError as e:
            sys.stderr.write(os.path.basename(e.filename) + ':' +
                             str(e.linenum) + ': ' + e.message + '\n')
        basename = os.path.basename(file)
        if basename.endswith('.duck'):
            basename = basename[:-5]
        if args.output is None:
            outfile = os.path.join(os.path.dirname(file), basename + '.page')
        elif os.path.isdir(args.output):
            # FIXME: try to recreate directory structure?
            outfile = os.path.join(args.output, basename + '.page')
        else:
            outfile = args.output
        parser.document.write_xml(outfile)
