#!/usr/bin/env python

"""Merge two TAP files"""

from __future__ import print_function

import sys
import taptaptap
import argparse


def read_stdin():
    """Read and parse string from stdin"""
    content = u''
    encoding = sys.stdin.encoding or sys.getdefaultencoding()
    for line in sys.stdin:
        content += line.decode(encoding)
    return taptaptap.parse_string(content)


def main(args):
    if len(args.files) <= 1:
        raise ValueError("You must at least specify two TAP files")

    docs = [f == '-' and read_stdin() or taptaptap.parse_file(f)
            for f in args.files]
    doc3 = taptaptap.merge(*docs)

    if args.outfile:
        with open(args.outfile, 'w') as fp:
            fp.write(doc3)
    else:
        print(doc3, file=sys.stderr)

if __name__ == '__main__':
    # command line parameter parsing
    parser = argparse.ArgumentParser(description='Merge two or more TAP files.')
    parser.add_argument('files', metavar='F', nargs='+',
                        help='At least two TAP files to merge')
    parser.add_argument('-o', '--outputfile', dest='outfile', action='store',
                        help='write to filepath instead of stdout')

    main(parser.parse_args())
