#!/usr/bin/env python3

import sys

import about
import add_names
import bins
import contigs
import reads
import download
import prepare
import summarise


def usage():
    message = (
        "usage: CAT_pack (download | prepare | contigs | bins | reads "
        "| add_names | summarise) [-v / --version] [-h / --help]\n"
        "CAT_pack: error: one of the arguments "
        "download prepare contigs bins reads add_names summarise "
        "is required"
    )
    
    sys.stdout.write("{0}\n".format(message))

    return
    
    
def version():
    message = ("CAT_pack pack v{0} ({1})".format(
        about.__version__, about.__date__))
    if len(about.__authors__) == 1:
        message += " by {0}".format(about.__authors__[0])
    elif len(about.__authors__) == 2:
        message += " by {0}".format(" and ".join(about.__authors__))
    elif len(about.__authors__) > 2:
        message += " by {0}, and {1}".format(
            ", ".join(about.__authors__[:-1]), about.__authors__[-1])
    message += "."

    sys.stdout.write("{0}\n".format(message))

    return
    
    
def help():
    message = (
        "usage: CAT_pack (download | prepare | contigs | bins | reads "
        "| add_names | summarise) [-v / --version] [-h / --help]\n\n"
        "Run Contig Annotation Tool (CAT), "
        "Bin Annotation Tool (BAT), or " 
        "Read Annotation Tool (RAT).\n\n"
        "Required choice:\n"
        "  download\t\tDownload and preprocess data from NCBI nr or GTDB.\n"
        "  prepare\t\tConstruct database files.\n"
        "  contigs\t\tRun CAT.\n"
        "  bins\t\t\tRun BAT.\n"
        "  reads\t\t\tRun RAT.\n"
        "  add_names\t\tAdd taxonomic names to CAT, BAT, or RAT output files."
        "\n"
        "  summarise\t\tSummarise a named CAT or BAT classification file."
        "\n\n"
        "Optional arguments:\n"
        "  -v, --version\t\tPrint version information and exit.\n"
        "  -h, --help\t\tShow this help message and exit."
    )

    sys.stdout.write("{0}\n".format(message))

    return


def main():
    if len(sys.argv) == 1:
        usage()
    elif sys.argv[1] == "download":
        download.run()
    elif sys.argv[1] == "prepare":
        prepare.run()
    elif sys.argv[1] == "contigs":
        contigs.run()
    elif sys.argv[1] == "bins":
        bins.run()
    elif sys.argv[1] == "reads":
        reads.run()
    elif sys.argv[1] == "add_names":
        add_names.run()
    elif sys.argv[1] == "summarise":
        summarise.run()
    elif sys.argv[1] == "-v" or sys.argv[1] == "--version":
        version()
    elif sys.argv[1] == "-h" or sys.argv[1] == "--help":
        help()
    else:
        usage()

    return


if __name__ == "__main__":
    main()
