from astropy import units as u
from astropy.coordinates import AltAz, SkyCoord
from astropy.time import Time
from matplotlib import pyplot as plt
from m4opt.missions import rubin
from m4opt.synphot import observing
import numpy as np
from synphot import ConstFlux1D, SourceSpectrum

exptime = np.arange(30, 330, 30) * u.s
obstime = Time("2025-03-19T07:00:00")
loc = rubin.observer_location(obstime)
frame = AltAz(location=loc, obstime=obstime)
coord = SkyCoord(alt=90 * u.deg, az=0 * u.deg, frame=frame)

ax = plt.axes()
with observing(loc, coord, obstime):
    for filt in rubin.detector.bandpasses.keys():
        limmag = rubin.detector.get_limmag(
            5,
            exptime,
            SourceSpectrum(ConstFlux1D, amplitude=0 * u.ABmag),
            filt,
        )
        ax.plot(exptime, limmag, "-o", label=filt)
ax.invert_yaxis()
ax.legend()
ax.set_xlabel("Exposure time (s)")
ax.set_ylabel(r"5-$\sigma$ Limiting magnitude (AB)")