# retoor <retoor@molodetz.nl>

from tests.conftest import BASE_URL


def test_leaderboard_page_loads(alice):
    page, _ = alice
    page.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
    assert page.locator(".leaderboard-header h1").is_visible()
    assert page.is_visible("text=Ranked by total stars")


def test_leaderboard_no_pagination(alice):
    page, _ = alice
    page.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
    assert page.locator(".pagination").count() == 0


def test_leaderboard_ranks_after_upvote(app_server, browser, seeded_db):
    from tests.conftest import login_user
    ctx_a = browser.new_context(viewport={"width": 1400, "height": 900})
    ctx_b = browser.new_context(viewport={"width": 1400, "height": 900})
    try:
        pa = ctx_a.new_page()
        pb = ctx_b.new_page()
        pa.set_default_timeout(15000)
        pb.set_default_timeout(15000)

        login_user(pa, seeded_db["alice"])
        login_user(pb, seeded_db["bob"])

        pb.goto(f"{BASE_URL}/feed", wait_until="domcontentloaded")
        pb.locator(".feed-fab").first.wait_for(state="visible", timeout=10000)
        pb.locator(".feed-fab").first.click()
        pb.fill("#post-content", "Post for leaderboard ranking test")
        pb.locator("#create-post-modal button.btn-primary:has-text('Post')").click()
        pb.wait_for_url("**/posts/*", timeout=10000, wait_until="domcontentloaded")
        post_url = pb.url

        pa.goto(post_url, wait_until="domcontentloaded")
        pa.wait_for_timeout(1000)
        vote_btn = pa.locator("button.post-action-btn").filter(has_text="+").first
        vote_btn.wait_for(state="visible", timeout=10000)
        vote_btn.click()
        pa.wait_for_timeout(1500)

        ranked = False
        for _ in range(10):
            pa.goto(f"{BASE_URL}/leaderboard", wait_until="domcontentloaded")
            body = pa.locator("body").text_content()
            assert "Internal Server Error" not in body, f"Got 500 on leaderboard: {body[:300]}"
            if pa.is_visible("a.leaderboard-name:has-text('bob_test')"):
                ranked = True
                break
            pa.wait_for_timeout(500)
        assert ranked, "bob_test never appeared on the leaderboard"
    finally:
        ctx_a.close()
        ctx_b.close()
