from jitx.layerindex import Side
from jitx.run.runtime import SyncRuntimeDesign


def main(rd: SyncRuntimeDesign) -> dict[str, object]:
    rd.capture()

    def moved(instances) -> None:
        print("moved:", [str(instance) for instance in instances])

    with rd.layout.monitor.placements(moved):
        placed = rd.layout.place(rd.root.circuit.u1, (5, 5), 0, on=Side.Top)
        if not rd.layout.sync(timeout=30):
            raise TimeoutError("Move applied; background work is still pending")
    rd.capture()
    report = rd.issues()
    return {
        "placement": str(placed),
        "checks_complete": report.complete,
        "error_count": len(report.errors),
        "issues": report.text(),
    }
