#!python

import sys
from Dellingr import DellingrPipeline, Trim, Collapse, AdapterPredict, ClipOverlap, ResumePipeline, Call, Train, UpdateConfig

def usage():
    """
    Prints Dellingr's usage information to stdout
    """

    from Dellingr.__version import __version__
    sys.stdout.write("\nDellingr: Error supression and variant calling pipeline for Second-Generation sequencing data\n")
    sys.stdout.write("Version: " + __version__ + "\n")
    sys.stdout.write("\n")
    sys.stdout.write("Usage:\tdellingr <command> [options]\n")
    sys.stdout.write("\n")
    sys.stdout.write("Commands:\n")
    sys.stdout.write(" -- Analysis Pipeline\n")
    sys.stdout.write("    run_dellingr\tRuns all stages of the ProDuSe Pipeline\n")
    sys.stdout.write("    resume_dellingr\tResumes a previous terminated \"run_produse\"\n")
    sys.stdout.write("\n")
    sys.stdout.write(" -- Pipeline Components\n")
    sys.stdout.write("    trim\t\tTrims off barcodes from raw reads\n")
    sys.stdout.write("    collapse\t\tIdentifies duplicates, and merges duplicates into a consensus\n")
    sys.stdout.write("    call\t\tIdentifies and filters variants\n")
    sys.stdout.write("\n")
    sys.stdout.write(" -- Miscellaneous\n")
    sys.stdout.write("    clip\t\tGenerates a consensus from overlapping positions within a read pair\n")
    sys.stdout.write("    update_config\tUpdates an older ProDuSe/Dellingr configuration file\n")
    sys.stdout.write("    adapter_predict\tIdentifies the degerate barcode used in a set of FASTQ files\n")
    sys.stdout.write("    train\t\tTrains the variant calling filter using a set of validated variants\n")
    sys.stdout.write("\n")
    exit(1)


def main(args):

    # Print out a usage message
    if len(args) == 1:
        usage()
        return

    command = args[1]

    if command == "adapter_predict":
         AdapterPredict.main(sysStdin=args[2:])
    elif command == "update_config":
        UpdateConfig.main(sysStdin=args[2:])
    elif command == "run_produse" or command == "run_dellingr":
        DellingrPipeline.main(sysStdin=args[2:])
    elif command == "resume_produse" or command == "resume_dellingr":
        ResumePipeline.main(sysStdin=args[2:])
    elif command == "trim":
        Trim.main(sysStdin=args[2:])
    elif command == "collapse":
        Collapse.main(sysStdin=args[2:])
    elif command == "clip" or command == "clipoverlap":
        ClipOverlap.main(sysStdin=args[2:])
    elif command == "call":
        Call.main(sysStdin=args[2:])
    elif command == "train":
        Train.main(sysStdin=args[2:])
    else:
        sys.stdout.write("Unrecognized Command: %s\n" % command)
        usage()

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