"""One-shot workflow for capturing a full calibration set."""

from __future__ import annotations

from python_app.models.dataset_model import SweepCollection
from python_app.models.run_config_model import RunConfigModel
from python_app.storage.npz_store import NpzStore
from python_app.workflows.sequential_capture_workflow import SequentialCaptureSession


def capture_calibration_set(
    config: RunConfigModel,
    set_name: str,
    store: NpzStore,
) -> tuple[str, SweepCollection]:
    """Capture all switch combinations and persist them as calibration set."""
    if config.is_multi_device:
        raise RuntimeError(
            "LibreVNA multi-device S21 through calibration is not supported by this one-shot full-set helper. "
            "Use the sequential preprocess capture flow so each virtual combo can be connected through "
            "and captured explicitly."
        )

    session = SequentialCaptureSession(config=config, kind="s21_calibration", set_name=set_name)
    try:
        session.open()
        while not session.is_complete():
            session.capture_current_combo()
        return session.finalize(store)
    finally:
        session.close()
