"""Scroll scene: step-scroll for ``duration`` or until ``toSelector`` is hit."""
from __future__ import annotations

import time

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


@register("scroll")
def scene_scroll(page, scene: dict) -> None:
    step = scene.get("step", 50)
    interval = scene.get("interval", 60)
    if scene.get("fromSelector"):
        from_loc = resolve_locator(page, scene["fromSelector"])
        from_loc.scroll_into_view_if_needed()
        page.wait_for_timeout(300)
    elif scene.get("startTop"):
        page.evaluate("() => window.scrollTo(0, 0)")
        page.wait_for_timeout(200)
    duration = scene.get("duration", 8000)
    page.evaluate(
        js_loader.load("scroll"),
        {
            "step": step,
            "interval": interval,
            "endTime": int(time.time() * 1000) + duration,
            "toSelector": scene.get("toSelector"),
        },
    )
    page.wait_for_timeout(scene.get("holdAtEnd", 600))
