"""Sequence scene: multiple targets get numbered outlines, revealed in order."""
from __future__ import annotations

from .. import js_loader
from ..browser import resolve_locator
from . import register


@register("sequence")
def scene_sequence(page, scene: dict) -> None:
    raw = scene.get("items") or []
    items: list[dict] = []
    for it in raw:
        if isinstance(it, str):
            sel, label = it, ""
        else:
            sel = it.get("selector")
            label = it.get("label", "")
        if not sel:
            continue
        try:
            loc = resolve_locator(page, sel)
            box = loc.bounding_box()
        except Exception:
            continue
        if not box:
            continue
        items.append({"box": box, "label": label})
    if not items:
        raise RuntimeError("sequence: no resolvable items")
    step_ms = int(scene.get("stepMs", 500))
    page.evaluate(
        js_loader.load("sequence"),
        {
            "items": items,
            "color": scene.get("color", "#ff3b30"),
            "lineWidth": scene.get("lineWidth", 3),
            "padding": scene.get("padding", 6),
            "stepMs": step_ms,
        },
    )
    total = step_ms * len(items) + int(scene.get("holdMs", 1500))
    page.wait_for_timeout(total)
