import time
from typing import Generator

import pytest
from playwright.sync_api import Page

from reflex.testing import AppHarness


def RouterDataApp():
    """App using router data."""
    import reflex as rx

    app = rx.App(state=rx.State)

    @app.add_page
    def index():
        return rx.text(rx.State.router.session.client_token)


@pytest.fixture()
def router_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
    """Start Table app at tmp_path via AppHarness.

    Args:
        tmp_path_factory: pytest tmp_path_factory fixture

    Yields:
        running AppHarness instance

    """
    with AppHarness.create(
        root=tmp_path_factory.mktemp("table"),
        app_source=RouterDataApp,  # type: ignore
    ) as harness:
        assert harness.app_instance is not None, "app is not running"
        yield harness


def test_router_data(router_app: AppHarness, page: Page):
    assert router_app.frontend_url is not None

    page.goto(router_app.frontend_url)
    time.sleep(5)