"""Redact scene: blur / pixelate / solid-cover sensitive regions."""
from __future__ import annotations

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


@register("redact")
def scene_redact(page, scene: dict) -> None:
    selectors: list[str] = list(scene.get("selectors") or [])
    if not selectors and scene.get("selector"):
        selectors.append(scene["selector"])
    items: list[dict] = []
    for sel in selectors:
        try:
            loc = resolve_locator(page, sel)
            box = loc.bounding_box()
        except Exception:
            continue
        if box:
            items.append({"box": box, "color": scene.get("color", "#222")})
    if not items:
        raise RuntimeError("redact: no resolvable targets")
    page.evaluate(
        js_loader.load("redact"),
        {
            "items": items,
            "mode": scene.get("mode", "blur"),
        },
    )
    page.wait_for_timeout(scene.get("duration", 2500))
