#! python
import os
import sys
import argparse
import logging
from pyteomics import runtandem

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('input', help='XML file with search parameters')
    parser.add_argument('dir', help='Directory to store the results')
    parser.add_argument('db', help='FASTA database for search')
    parser.add_argument('spectra', nargs='*',
            help='Any number of data files to search (globs supported)')
    parser.add_argument('--noconvert', dest='convert', action='store_false',
            help='Do not convert results to pepXML')
    parser.add_argument('--overwrite', action='store_true',
            help='Overwrite previous files instead of renaming the new ones')
    parser.add_argument('--tandem.exe', dest='tandem', metavar='FILE',
            help='X!Tandem executable')
    parser.add_argument('--tandem2xml', metavar='FILE',
            help='Tandem2XML converter executable')
    parser.add_argument('-v', '--verbosity', action='count', default=0,
            help='Increase output verbosity')

    levels = [logging.ERROR, logging.INFO, logging.DEBUG]
    args = parser.parse_args()
    level = 2 if args.verbosity > 2 else args.verbosity
    logging.basicConfig(format='%(levelname)5s: %(asctime)s %(message)s',
            datefmt='[%H:%M:%S]', level=levels[level])

    logging.info("Starting runtandem...")
    spectra = args.spectra or None
    tandem = args.tandem or runtandem.tandem
    tandem2xml = args.tandem2xml or runtandem.tandem2xml
    if tandem is None:
        logging.error("X!Tandem executable not specified. "
                "Use --tandem.exe or set the TANDEMEXE variable")
        sys.exit(2)
    if args.convert and tandem2xml is None:
        logging.error("Tandem2XML command or executable not specified. "
                "Use --tandem2xml or set the TANDEM2XML variable")
        sys.exit(2)
    if args.db is not None and not os.path.exists(args.db):
        logging.error("Could not find the database: %s" % args.db)
        sys.exit(1)

    runtandem.runtandem(args.dir, args.input, args.db, spectra,
                args.convert, args.overwrite, tandem, tandem2xml)
