#!python
import sys
import argparse

# import logging
import matplotlib.pyplot as pl
from quicklook.tql import TessQuickLook
from quicklook.plot import dss_description

long_decription = """Run a quick look analysis of a TESS lightcurve.
Notes:
* use single hyphen (-flag) if no value is needed.
* use double hyphen (--flag value) if value is needed.

Example: ql --name TOI-1234 --sector 27 -save -verbose
"""

parser = argparse.ArgumentParser(
    description=long_decription, formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument("--name", type=str, help="target name", default=None)
parser.add_argument(
    "--sector",
    # type=int,
    help="TESS sector (default=-1 (last available sector))",
    default=-1,
)
# parser.add_argument(
#     "-c",
#     "--cadence",
#     type=str,
#     choices=["long", "short"],
#     help="30-min long or 2-min short (default)",
#     default="short",
# )
# parser.add_argument(
#     "-sr",
#     "--search_radius",
#     type=float,
#     help="search radius in arcsec (default=3)",
#     default=3,
# )
parser.add_argument(
    "--fluxtype",
    type=str,
    help="type of lightcurve",
    choices=[
        "pdcsap",
        "sap",
    ],
    default="pdcsap",
)
parser.add_argument(
    "--pipeline",
    type=str,
    help="lightcurve produced from which pipeline (default=SPOC)",
    choices=[
        "spoc",
        "tess-spoc",
        "tasoc",
        # "custom",
        "cdips",
        "pathos",
        "qlp",
        "tglc",
        # "diamante",
    ],
    default="SPOC",
)
parser.add_argument(
    "--exptime",
    type=int,
    help="exposure time (default is whatever is used in available sector)",
    default=None,
)
# parser.add_argument(
#     "-m",
#     "--mission",
#     type=str,
#     help="TESS or K2 or Kepler",
#     default='TESS',
# )
# parser.add_argument(
#     "-a",
#     "--aper_mask",
#     type=str,
#     help="aperture mask type",
#     choices=["pipeline", "round", "square", "percentile", "threshold"],
#     default=None,
# )
# parser.add_argument(
#     "-t", "--threshold", type=float, help="mask threshold in sigma", default=5
# )
# parser.add_argument(
#     "-r", "--aper_radius", type=int, help="mask radius in pix", default=1
# )
# parser.add_argument(
#     "-perc", "--percentile", type=float, help="mask percentile", default=90
# )
# parser.add_argument(
#     "-qb",
#     "--quality_bitmask",
#     type=str,
#     choices=["none", "default", "hard", "hardest"],
#     default="default",
# )
# parser.add_argument(
#     "-size",
#     "--cutout_size",
#     nargs=2,
#     type=float,
#     help="FFI cutout size for long cadence (default=[12,12] pix)",
#     default=(12, 12),
# )
parser.add_argument(
    "--flatten_method",
    type=str,
    help="wotan flatten method (default=biweight)",
    default="biweight",
)
parser.add_argument(
    "--pg_method",
    type=str,
    help="periodogran method (default=gls)",
    default="gls",
    choices=["gls", "ls", "bls"],
)
parser.add_argument(
    "--window_length",
    type=float,
    help="flatten method window length (default=0.5 days)",
    default=None,
)
parser.add_argument(
    "--edge_cutoff",
    type=int,
    help="cut each edges (default=0.1 days)",
    default=0.1,
)
parser.add_argument(
    "--sigma_clip_raw",
    type=float,
    help="(sigma_lo,sigma_hi) for outlier rejection of raw lc before flattening/detrending",
    nargs=2,
    default=(10, 5),
)
parser.add_argument(
    "--sigma_clip_flat",
    help="(sigma_lo,sigma_hi) for outlier rejection of flattened/detrended lc",
    nargs=2,
    type=float,
    default=None,
)
parser.add_argument(
    "--period_limits",
    help="period limits in TLS search; default=(0.5, baseline/2) d",
    nargs=2,
    type=float,
    default=None,
)
# parser.add_argument(
#     "-qm",
#     "--quality_mask",
#     action="store_true",
#     help="remove chunks of bad cadences identified in data release notes",
#     default=False,
# )
# parser.add_argument(
#     "-u",
#     "--use_priors",
#     action="store_true",
#     help="use star priors for detrending and periodogram",
#     default=False,
# )
parser.add_argument(
    "--survey",
    help="archival image survey name if using img option (default=dss1)",
    choices=list(dss_description.keys()),
    default="dss1",
)
parser.add_argument(
    "--custom_ephem",
    help="custom ephemeris in days. Example: --custom_ephem Tc Tcerr P Perr Tdur Tdurerr",
    nargs=6,
    type=float,
    default=None,
)
parser.add_argument("--outdir", type=str, help="output directory", default=".")
parser.add_argument(
    "-save",
    action="store_true",
    help="save figure and tls",
    default=False,
)
parser.add_argument(
    "-verbose", action="store_true", help="show details", default=False
)
parser.add_argument(
    "-overwrite", action="store_true", help="overwrite files", default=False
)
# parser.add_argument(
#     "-use_tpf_image",
#     action="store_true",
#     help="plot gaia sources on tpf image instead of archival image (default=False)",
#     default=False,
# )
parser.add_argument(
    "-mask_ephem",
    help="mask transits either using TFOP or custom ephemerides if available (default=False)",
    action="store_true",
    default=False,
)

# prints help if no argument supplied
args = parser.parse_args(None if sys.argv[1:] else ["-h"])

if __name__ == "__main__":
    ql = TessQuickLook(
        # gaia2id=args.gaia2id,
        # gaia3id=args.gaia3id,
        # toiid=args.toi,
        # ticid=args.tic,
        # coords=args.coords,
        target_name=args.name,
        # search_radius=args.search_radius,
        sector=args.sector,
        # cadence=args.cadence,
        pipeline=args.pipeline,
        exptime=args.exptime,
        flux_type=args.fluxtype,
        pg_method=args.pg_method,
        custom_ephem=args.custom_ephem,
        mask_ephem=args.mask_ephem,
        # sap_mask=args.aper_mask,
        # aper_radius=args.aper_radius,
        # threshold_sigma=args.threshold,
        # percentile=args.percentile,
        # quality_bitmask=args.quality_bitmask,
        # apply_data_quality_mask=args.quality_mask,
        flatten_method=args.flatten_method,
        window_length=args.window_length,
        sigma_clip_raw=args.sigma_clip_raw,
        sigma_clip_flat=args.sigma_clip_flat,
        # cutout_size=args.cutout_size,
        # bin_hr=args.bin_hr,
        Porb_limits=args.period_limits,
        # use_star_priors=args.use_priors,
        edge_cutoff=args.edge_cutoff,
        # find_cluster=args.find_cluster,
        # nearby_gaia_radius=args.nearby_gaia_radius,
        # run_gls=args.gls,
        archival_survey=args.survey,
        savefig=args.save,
        savetls=args.save,
        outdir=args.outdir,
        verbose=args.verbose,
        overwrite=args.overwrite,
        # check_if_variable=args.check_if_variable,
        # estimate_spec_type=args.spec_type,
        # estimate_gyro_age=args.gyro_age,
    )
    fig = ql.plot_tql()
    if not args.save:
        pl.show()
    pl.close()
