#!/usr/bin/env python3

import argparse
import os
import logging

from miner import GIT_SHA
from miner import __version__ as MINER_VERSION
from miner import coexpression, util, miner

DESCRIPTION = """miner3-coexpr - MINER cluster expression data.
MINER Version %s (Git SHA %s)""" % (str(MINER_VERSION).replace('miner3 ', ''),
                                    GIT_SHA.replace('$Id: ', '').replace(' $', ''))


if __name__ == '__main__':
    mpl_logger = logging.getLogger('matplotlib')
    mpl_logger.setLevel(logging.WARNING)

    LOG_FORMAT = '%(asctime)s %(message)s'
    logging.basicConfig(format=LOG_FORMAT, level=logging.DEBUG,
                        datefmt='%Y-%m-%d %H:%M:%S \t')

    parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
                                     description=DESCRIPTION)
    parser.add_argument('expfile', help="input matrix")
    parser.add_argument('mapfile', help="identifier mapping file")
    parser.add_argument('outdir', help="output directory")
    parser.add_argument('-mg', '--mingenes', type=int, default=6, help="min number genes")
    parser.add_argument('-moxs', '--minoverexpsamp', type=int, default=4,
                        help="minimum overexpression samples")
    parser.add_argument('-mx', '--maxexclusion', type=float, default=0.5,
                        help="maximum samples excluded")
    parser.add_argument('-rs', '--randstate', type=int, default=12,
                        help="random state")
    parser.add_argument('-oxt', '--overexpthresh', type=int, default=80,
                        help="overexpression threshold")
    parser.add_argument('--skip_tpm', action="store_true",
                        help="overexpression threshold")

    args = parser.parse_args()

    if not os.path.exists(args.expfile):
        sys.exit("expression file not found")
    if not os.path.exists(args.mapfile):
        sys.exit("identifier mapping file not found")

    if not os.path.exists(args.outdir):
        os.makedirs(args.outdir)

    with open(os.path.join(args.outdir, 'run_info.txt'), 'w') as outfile:
        util.write_dependency_infos(outfile)

    exp_data, conv_table = miner.preprocess(args.expfile, args.mapfile,
                                            do_preprocess_tpm=(args.skip_tpm))
    coexpression.coexpression(exp_data, args.outdir,
                              args.skip_tpm,
                              args.mingenes, args.minoverexpsamp,
                              args.maxexclusion, args.overexpthresh,
                              args.randstate)
