import mergevcf.mergedfile as mergedfile
import argparse
import os
import sys

def main():
    """Merge VCF files, output to stdout or file"""
    defsvwindow = 100

    parser = argparse.ArgumentParser(description='Merge calls in VCF files')
    parser.add_argument('input_files', nargs='+', help='Input VCF files')
    parser.add_argument('-o', '--output', type=argparse.FileType('w'), default=sys.stdout, help="Specify output file (default:stdout)") 
    parser.add_argument('-v', '--verbose', action='store_true', help="Specify verbose output")
    parser.add_argument('-l', '--labels', type=str, help='Comma-separated labels for each input VCF file (default:basenames)')
    parser.add_argument('-n', '--ncallers', action='store_true', help='Annotate variant with number of callers')
    parser.add_argument('-m', '--mincallers', type=int, default=0, help='Minimum # of callers for variant to pass')
    parser.add_argument('-s', '--sv', action='store_true', help='Force interpretation as SV (default:false)')
    parser.add_argument('-f', '--filtered', action='store_true', help='Include records that have failed one or more filters (default:false)')
    parser.add_argument('-w', '--svwindow', default=defsvwindow, type=int,
                         help='Window for comparing breakpoint positions for SVs (default:'+str(defsvwindow)+')')

    args = parser.parse_args()
    input_files = args.input_files
    if args.labels is None:
        labels = [os.path.splitext(os.path.basename(f))[0] for f in input_files]
    else:
        labels = [label.strip() for label in args.labels.split(',')]

    mergedfile.merge(input_files, labels, args.sv, args.output,
                     slop=args.svwindow, verbose=args.verbose,
                     output_ncallers=args.ncallers,
                     min_num_callers=args.mincallers,
                     filterByChromosome=True, noFilter=args.filtered)