#!/usr/bin/env python
# Licensed under a 3-clause BSD style license - see LICENSE.rst

from __future__ import (absolute_import, unicode_literals, division,
                        print_function)

from maltpynt.mp_io import mp_load_data
import logging
from maltpynt.mp_create_gti import mp_apply_gti, mp_create_gti
import argparse

description = ('Create GTI files from a filter expression, or applies '
               'previously created GTIs to a file')
parser = argparse.ArgumentParser(description=description)

parser.add_argument("files", help="List of files", nargs='+')

parser.add_argument("-f", "--filter", type=str, default=None,
                    help="Filter expression, that has to be a valid " +
                    "Python boolean operation on a data variable " +
                    "contained in the files")

parser.add_argument("-c", "--create-only",
                    default=False, action="store_true",
                    help="If specified, creates GTIs withouth applying" +
                    "them to files (Default: False)")

parser.add_argument("-o", "--overwrite",
                    default=False, action="store_true",
                    help="Overwrite original file (Default: False)")

parser.add_argument("-a", "--apply-gti", type=str, default=None,
                    help="Apply a GTI from this file to input files")

parser.add_argument("--safe-interval", nargs=2, type=float,
                    default=[0, 0],
                    help="Interval at start and stop of GTIs used" +
                    " for filtering")
parser.add_argument("--loglevel",
                    help=("use given logging level (one between INFO, "
                          "WARNING, ERROR, CRITICAL, DEBUG; default:WARNING)"),
                    default='WARNING',
                    type=str)
parser.add_argument("--debug", help="use DEBUG logging level",
                    default=False, action='store_true')

if __name__ == '__main__':
    args = parser.parse_args()
    files = args.files

    if args.debug:
        args.loglevel = 'DEBUG'

    numeric_level = getattr(logging, args.loglevel.upper(), None)
    logging.basicConfig(filename='MPcreategti.log', level=numeric_level,
                        filemode='w')

    filter_expr = args.filter

    for fname in files:
        if args.apply_gti is not None:
            data = mp_load_data(args.apply_gti)
            gtis = data['GTI']
        else:
            gtis = mp_create_gti(fname, filter_expr,
                                 safe_interval=args.safe_interval)
        if args.create_only:
            continue
        if args.overwrite:
            outname = fname
        else:
            # Use default
            outname = None
        mp_apply_gti(fname, gtis)
