"""Hover scene: move cursor onto target and hold so tooltips/cards reveal."""
from __future__ import annotations

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


@register("hover")
def scene_hover(page, scene: dict) -> None:
    locator = resolve_locator(page, scene["selector"])
    box = locator.bounding_box()
    if not box:
        raise RuntimeError(f"hover: no bounding box for {scene['selector']}")
    cx = box["x"] + box["width"] / 2
    cy = box["y"] + box["height"] / 2

    move_ms = int(scene.get("moveMs", 700))
    hold_ms = int(scene.get("holdMs", 2500))

    page.evaluate(js_loader.load("cursor_bootstrap"))
    page.evaluate(js_loader.load("cursor_move"), {"x": cx, "y": cy, "ms": move_ms})
    page.wait_for_timeout(move_ms + 80)
    try:
        locator.hover()
    except Exception:
        pass
    page.wait_for_timeout(hold_ms)
