#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
everest-stats
-------------

Plots various statistics for the :py:mod:`everest` light curves.

'''

import argparse
from everest.config import EVEREST_DEV
import logging
log = logging.getLogger(__name__)

if __name__ == '__main__':

    parser = argparse.ArgumentParser(prog='everest-stats', add_help=True)
    parser.add_argument("season", nargs='?', type=str,
                        default=None, help='The season to analyze')
    parser.add_argument("model", nargs='?', type=str,
                        default=None, help='The everest model to analyze')
    parser.add_argument("compare_to", nargs='?', type=str,
                        default=None, help='The model to compare to')
    parser.add_argument("-i", "--inject", action='store_true',
                        help='Run injection stats?')
    parser.add_argument("-m", "--mission", type=str,
                        default='k2', help='Mission to analyze')
    parser.add_argument("-s", "--short", action='store_true',
                        help='Short cadence?')
    parser.add_argument("-p", "--planets",
                        action='store_true', help='Planet hosts only?')
    args = parser.parse_args()

    # Get the mission
    from everest import missions
    from everest.utils import InitLog
    Statistics = getattr(missions, args.mission).Statistics
    InitLog(None, logging.CRITICAL, logging.DEBUG, False)

    # Get the cadence
    if args.short:
        cadence = 'sc'
    else:
        cadence = 'lc'

    # HACK: Planet hosts are plotted for all seasons
    if args.planets and args.season is not None:
        try:
            float(args.season)
            raise Exception("Argument `season` not allowed with `-p` option.")
        except ValueError:
            try:
                int(args.season)
                raise Exception(
                    "Argument `season` not allowed with `-p` option.")
            except ValueError:
                args.compare_to = args.model
                args.model = args.season
                args.season = None

    # HACK: Short cadence comparison to long cadence only
    if args.short:
        if args.compare_to:
            raise Exception(
                "Argument `compare_to` not allowed with `-s` option.")

    # Get the season number
    if args.season is not None:
        if '.' in args.season:
            season = float(args.season)
        else:
            season = int(args.season)
    else:
        season = None

    # Injection run?
    if args.inject:
        args.compare_to = None
        injection = True
    else:
        injection = False

    # Dev version hack
    clobber = False
    plot = True
    if EVEREST_DEV:
        import platform
        if platform.system() == "Linux":
            clobber = True
            plot = False

    # Call the stats function
    if season is not None:
        if args.model is not None:
            if args.compare_to is not None:
                Statistics(season=season, model=args.model,
                           compare_to=args.compare_to,
                           injection=injection, clobber=clobber,
                           plot=plot, cadence=cadence, planets=args.planets)
            else:
                Statistics(season=season, model=args.model,
                           injection=injection,
                           clobber=clobber, plot=plot,
                           cadence=cadence, planets=args.planets)
        else:
            if args.compare_to is not None:
                Statistics(season=season, compare_to=args.compare_to,
                           injection=injection,
                           clobber=clobber, plot=plot, cadence=cadence,
                           planets=args.planets)
            else:
                Statistics(season=season, injection=injection, clobber=clobber,
                           plot=plot, cadence=cadence, planets=args.planets)
    else:
        if args.model is not None:
            if args.compare_to is not None:
                Statistics(model=args.model, compare_to=args.compare_to,
                           injection=injection,
                           clobber=clobber, plot=plot, cadence=cadence,
                           planets=args.planets)
            else:
                Statistics(model=args.model, injection=injection,
                           clobber=clobber,
                           plot=plot, cadence=cadence, planets=args.planets)
        else:
            if args.compare_to is not None:
                Statistics(compare_to=args.compare_to, injection=injection,
                           clobber=clobber, plot=plot, cadence=cadence,
                           planets=args.planets)
            else:
                Statistics(injection=injection, clobber=clobber,
                           plot=plot, cadence=cadence, planets=args.planets)
