from finesse.analysis.actions.random import Change
from finesse.analysis.actions.optimisation import Maximize
from finesse.analysis.actions.optimisation import Minimize
from finesse.analysis.actions.series import Series
from finesse.analysis.actions.temporary import TemporaryParameters

TemporaryParameters(
    Series(
        Change(
            {
                "eom1.midx": 0,
                "eom2.midx": 0,
                "eom3.midx": 0,
                "SR.misaligned": True,
                "PR.misaligned": True,
                "SRAR.misaligned": True,
                "PRAR.misaligned": True,
            }
        ),
        # Maximise arm power
        Maximize("B7_DC", "NE_z.DC", bounds=[-180, 180], tol=1e-14),
        Maximize("B8_DC", "WE_z.DC", bounds=[-180, 180], tol=1e-14),
        # Minimise dark fringe power
        Minimize("B1_DC", "MICH.DC", bounds=[-180, 180], tol=1e-14),
        # Bring in PR
        Change({"PR.misaligned": False}),
        # Maximise PRC power
        Maximize("CAR_AMP_BS", "PRCL.DC", bounds=[-180, 180], tol=1e-14),
        # Bring in SR
        Change({"SR.misaligned": False}),
        # Maximise SRC power, then offset by 90°
        Change({"SRCL.DC": 0}),
        Maximize("B1_DC", "SRCL.DC", bounds=[-180, 180], tol=1e-14),
        Change({"SRCL.DC": -90}, relative=True),
    ),
    exclude=(
        "PR.phi",
        "NI.phi",
        "NE.phi",
        "WI.phi",
        "WE.phi",
        "SR.phi",
        "NE_z.DC",
        "WE_z.DC",
        "MICH.DC",
        "PRCL.DC",
        "SRCL.DC",
    ),
)
