from jitx.component import Component
from jitx.run.runtime import SyncRuntimeDesign


def main(rd: SyncRuntimeDesign) -> dict[str, object]:
    if not rd.layout.sync(timeout=30):
        raise TimeoutError("Layout work did not settle within 30 seconds")
    rd.capture()
    report = rd.issues()
    components = []
    for trace, component in rd.query(Component):
        placement = (
            trace.transform * component.transform
            if component.transform is not None else None
        )
        components.append({
            "path": str(trace.path),
            "placement": None if placement is None else {
                "position_mm": list(placement.translation),
                "rotation_deg": placement.rotation,
                "side": placement.side.name,
            },
        })
    return {
        "design": rd.name,
        "components": components,
        "checks_complete": report.complete,
        "error_count": len(report.errors),
        "issues": report.text(),
    }
