#!/usr/bin/env python

"""Merge two TAP files"""

from __future__ import print_function

import sys
import taptaptap3
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 taptaptap3.parse_string(content)


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

    docs = [(read_stdin() if f == "-" else taptaptap3.parse_file(f)) for f in args.files]
    doc3 = taptaptap3.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())
