#!/usr/bin/env python3
import sys
sys.path.insert(0,'../')
sys.path.insert(0,'./')
import argparse
import os
import pkg_resources
sys.path.append('../')
sys.path.append('./')
from krocus.Krocus import Krocus
from krocus.InputTypes import InputTypes

version = ''
try:
	version = pkg_resources.get_distribution("krocus").version
except pkg_resources.DistributionNotFound:
	version = 'x.y.z'

parser = argparse.ArgumentParser(
	description = 'multi-locus sequence typing (MLST) from uncorrected long reads',
	usage = 'krocus [options] allele_directory input.fastq', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('allele_directory', help='Allele directory', type=InputTypes.is_allele_directory_valid )
parser.add_argument('input_fastq', help='Input FASTQ file (optionally gzipped)', type=InputTypes.is_fastq_file_valid)

parser.add_argument('--filtered_reads_file', '-f', help='Filename to save matching reads to')
parser.add_argument('--output_file',	 '-o', help='Output file [STDOUT]')
parser.add_argument('--max_gap',  help='Maximum gap for blocks to be contigous, measured in multiples of the k-mer size', type=int, default=4)
parser.add_argument('--margin',  help='Flanking region around a block to use for mapping', type=int, default=50)
parser.add_argument('--min_block_size',  help='Minimum block size in bases', type=int, default=150)
parser.add_argument('--min_fasta_hits',	 '-m', help='Minimum No. of kmers matching a read', type=int, default = 10)
parser.add_argument('--min_kmers_for_onex_pass', help='Minimum No. of kmers matching a read in 1st pass', type=int, default = 10)
parser.add_argument('--max_kmers', '-r', help='Dont count kmers occuring more than this many times', type=int, default = 10)

parser.add_argument('--print_interval',	 '-p', help='Print ST every this number of reads', type=int, default = 500)

parser.add_argument('--kmer',	 '-k', help='k-mer size', type=InputTypes.is_kmer_valid, default = 11)
parser.add_argument('--divisible_by_3', '-d', action='store_true', help='Genes which are not divisible by 3 are excluded', default = False)

parser.add_argument('--target_st',  help='For performance testing print time to find given ST', type=int)
parser.add_argument('--verbose', '-v', action='store_true', help='Turn on debugging [%(default)s]', default = False)
parser.add_argument('--version', action='version', version=str(version))

options = parser.parse_args()

krocus = Krocus(options)
krocus.run()
