#!/usr/bin/env python


import argparse
from subprocess import TimeoutExpired
import sys
import os
# sys.path.append(os.getcwd())
import time
import sys
from psmpa.psmpa2_pipeline import full_pipeline
from psmpa.util import get_version
from psmpa.default import project_dir


version=get_version(os.path.join(project_dir,'__init__.py'))

PSMPA2_METHODS = ['mean_float', 'mean_int', 'median_float', 'median_int']

parser = argparse.ArgumentParser(
    prog='psmpa2',
    description="Predicting Secondary Metabolism Potential using microbial Amplicons based on BLAST strategy.",
    epilog='''
example:
psmpa2 -s sequences.fasta -i feature-table.biom -o psmpa2_result
           ''',
    formatter_class=argparse.RawDescriptionHelpFormatter

)

parser.add_argument('-s', '--study_fasta', metavar='PATH', required=True,
                    type=str, help='FASTA of unaligned study sequences (i.e. '
                                   'amplicons or 16S rRNA)')

parser.add_argument('-i', '--input', metavar='PATH', type=str,
                    help='Input table of sequence abundances (BIOM, TSV or '
                         'mothur shared file format)')

parser.add_argument('-o', '--output', metavar='PATH', required=True,
                    type=str, help='Output folder for final files')
                
parser.add_argument('-f', '--force', default=False, action='store_true',
                    help='Overwrite existed output folder (default: %(default)s)')

parser.add_argument('-m', '--method', default='mean_float',
                    choices=PSMPA2_METHODS,
                    help='statistics method to use. '
                    '"mean_float": average float number of BGC in reference sequence cluster. '
                    '"mean_int": average integer number of BGC in reference sequence cluster. '
                    '"median_float": median float number of BGC in reference sequence cluster. '
                    '"median_int": median interger number of BGC in reference sequence cluster. '
                    '(default: %(default)s)')

# parser.add_argument('-p', '--processes', type=int, default=8,
                    # help='Number of processes to run in parallel (default: '
                        #  '%(default)d)')

parser.add_argument('-t', '--threshold', type=int, default=0,
                    help='Blast percent identity cutoff (default: %(default)s)')

parser.add_argument('--verbose', default=False, action='store_true',
                    help='Print out details as commands are run (default: %(default)s)')

parser.add_argument('-v', '--version', default=False, action='version',
                    version="%(prog)s " + version)


def main():

    start_time = time.time()

    args = parser.parse_args()

    full_pipeline(study_fasta=args.study_fasta,
                  input_table=args.input,
                  output_folder=args.output,
                  force=args.force,
                  method=args.method,
                #   processes=args.processes,
                  threshold=args.threshold,
                  verbose=args.verbose)

    if args.verbose:
        elapsed_time = time.time() - start_time
        print("Completed psmpa2 pipeline in " + "%.2f" % elapsed_time +
              " seconds.", file=sys.stderr)


if __name__ == "__main__":
    main()
