from glob import glob

import numpy as np
import pandas as pd
import yaml

from herschelhelp.footprints import compute_coverages
from pymoc import MOC

def read_yaml(file_):
    with open(file_, 'r') as stream:
        content = yaml.load(stream)
    return content

columns = [
    "DMU product", "Survey", "Telescope", "Instrument", "Filters", "P.I.",
    "Reference", "Proposal ID", "Observation dates", "Publication dates",
    "URL", "COSMOS", "GAMA-15", "XMM-LSS", "Bootes", "CDFS-SWIRE", "ELAIS-N1",
    "GAMA-12", "GAMA-09", "Lockman-SWIRE", "EGS", "ELAIS-S1", "AKARI-NEP",
    "ELAIS-N2", "xFLS", "Herschel-Stripe-82", "HATLAS-NGP", "HATLAS-SGP",
    "AKARI-SEP", "SPIRE-NEP", "SSDF", "HDF-N", "SA13", "XMM-13hr",
    "Acknowledgement"
]

df = pd.DataFrame()

for dmu_product in glob("dmu0_*"):
    try:
        survey = read_yaml("{}/meta_survey.yml".format(dmu_product))
        survey["DMU product"] = dmu_product

        try:
            moc = MOC(filename="{}/data/{}_MOC.fits".format(
                dmu_product, dmu_product))
            coverage = compute_coverages(moc)
            for field in coverage:
                if coverage[field]:
                    survey[field] = "{}%".format(round(coverage[field]))
                else:
                    coverage[field] = "-"
        except FileNotFoundError:
            print("{} has no MOC".format(dmu_product))

        # Dictionnary values must be list so that the dictionnary can be
        # convertedto a pandas dataframe.
        for k in survey:
            survey[k] = [survey[k]]

        df = df.append(pd.DataFrame(survey))

    except FileNotFoundError:
        print("{} has no survey information...".format(dmu_product))

df.replace(np.nan, "", inplace=True)
df.sort_values("DMU product", inplace=True)
df.to_excel("summary.xls", columns=columns, index=False)
