import lenstronomy.Util.util as util


instrument_name_list = ["LSST"]
observation_name_list = ["LSST_g_band", "LSST_r_band", "LSST_i_band"]

__all__ = ["observation_constructor"]


def observation_constructor(instrument_name, observation_name):
    """

    :param instrument_name: string, name of instrument referenced in this file
    :param observation_name: string, name of observation referenced in this file
    :return: instance of the SimulationAPI.data_type instance
    """

    if instrument_name == "LSST":
        kwargs_instrument = LSST_camera
    else:
        raise ValueError(
            "instrument name %s not supported! Choose among %s"
            % (instrument_name, instrument_name_list)
        )

    if observation_name == "LSST_g_band":
        kwargs_observation = LSST_g_band_obs
    elif observation_name == "LSST_r_band":
        kwargs_observation = LSST_r_band_obs
    elif observation_name == "LSST_i_band":
        kwargs_observation = LSST_i_band_obs
    else:
        raise ValueError(
            "observation name %s not supported! Choose among %s"
            % (observation_name, observation_name_list)
        )
    kwargs_data = util.merge_dicts(kwargs_instrument, kwargs_observation)
    return kwargs_data


LSST_camera = {"read_noise": 10, "pixel_scale": 0.263, "ccd_gain": 4.5}

LSST_g_band_obs = {
    "exposure_time": 90.0,
    "sky_brightness": 21.7,
    "magnitude_zero_point": 30,
    "num_exposures": 10,
    "seeing": 0.9,
    "psf_type": "GAUSSIAN",
}

LSST_r_band_obs = {
    "exposure_time": 90.0,
    "sky_brightness": 20.7,
    "magnitude_zero_point": 30,
    "num_exposures": 10,
    "seeing": 0.9,
    "psf_type": "GAUSSIAN",
}

LSST_i_band_obs = {
    "exposure_time": 90.0,
    "sky_brightness": 20.1,
    "magnitude_zero_point": 30,
    "num_exposures": 10,
    "seeing": 0.9,
    "psf_type": "GAUSSIAN",
}
