from optparse import OptionParser
from task import Task
import logging
from utils import logging_utils
from model_param_space import param_space_dict
import datetime
import config

def parse_args(parser):
    parser.add_option("-m", "--model", dest="model_name", type="string")
    parser.add_option("-d", "--data", dest="data_name", type="string")
    parser.add_option("-r", "--runs", dest="runs", type="int", default=5)
    parser.add_option("-e", "--epoch", dest="epoch", default=False, action="store_true")
    parser.add_option("-s", "--save", dest="save", default=False, action="store_true")
    parser.add_option("-f", "--full", dest="full", default=False, action="store_true")
    options, args = parser.parse_args()
    return options, args

def main(options):
    if options.epoch:
        time_str = datetime.datetime.now().isoformat()
        logname = "Eval_[Model@%s]_[Data@%s]_%s.log" % (options.model_name,
                options.data_name, time_str)
        logger = logging_utils._get_logger(config.LOG_DIR, logname)
    else:
        time_str = datetime.datetime.now().isoformat()
        logname = "Final_[Model@%s]_[Data@%s]_%s.log" % (options.model_name,
                options.data_name, time_str)
        logger = logging_utils._get_logger(config.LOG_DIR, logname)
        # logger = logging.getLogger()
        # logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s', level=logging.INFO)
    params_dict = param_space_dict[options.model_name]
    task = Task(options.model_name, options.data_name, options.runs, params_dict, logger)
    if options.save:
        task.save()
    else:
        if options.epoch:
            task.refit()
        else:
            task.evaluate(options.full)

if __name__ == "__main__":
    parser = OptionParser()
    options, args = parse_args(parser)
    main(options)