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(
            {
                "A.midx": 0,
                "B.midx": 0,
                "C.midx": 0,
                "H.misaligned": True,
                "D.misaligned": True,
                "I.misaligned": True,
                "E.misaligned": True,
            }
        ),
        # Maximise arm power
        Maximize("O", "N.DC", bounds=[-180, 180], tol=1e-14),
        Maximize("S", "R.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({"D.misaligned": False}),
        # Maximise PRC power
        Maximize("G", "F.DC", bounds=[-180, 180], tol=1e-14),
        # Bring in SR
        Change({"H.misaligned": False}),
        # Maximise SRC power, then offset by 90°
        Change({"J.DC": 0}),
        Maximize("T", "J.DC", bounds=[-180, 180], tol=1e-14),
        Change({"J.DC": -90}, relative=True),
    ),
    exclude=(
        "D.phi",
        "L.phi",
        "M.phi",
        "P.phi",
        "Q.phi",
        "H.phi",
        "N.DC",
        "R.DC",
        "U.DC",
        "F.DC",
        "J.DC",
    ),
)
