"""Script to capture real browser screenshot of authenticated Agent Management Dashboard."""

import asyncio
import json
import os

import uvicorn
from playwright.async_api import async_playwright

from app.main import create_app
from app.modules.auth.application.auth_service import AuthService

ARTIFACT_DIR = (
    r"C:\Users\Admin\.gemini\antigravity\brain\72a29d29-fe73-4681-9740-f638d9cee945"
)


async def main():
    app = create_app()
    config = uvicorn.Config(app=app, host="127.0.0.1", port=8767, log_level="warning")
    server = uvicorn.Server(config)
    server_task = asyncio.create_task(server.serve())

    await asyncio.sleep(2)  # Wait for server to bind

    auth = AuthService()
    dev_session = auth.create_dev_user_session(
        email="son.dinhson@dscons.vn",
        name="Nguyễn Sĩ Sơn",
        role="superadmin",
    )
    token = dev_session["access_token"]
    user_payload = json.dumps(
        {
            "id": "superadmin-son",
            "email": "son.dinhson@dscons.vn",
            "name": "Nguyễn Sĩ Sơn",
            "role": "superadmin",
            "is_active": True,
        }
    )

    try:
        async with async_playwright() as p:
            browser = await p.chromium.launch(headless=True)
            context = await browser.new_context(
                viewport={"width": 1600, "height": 1200}
            )
            page = await context.new_page()

            # Set authentication in localStorage
            await page.goto("http://127.0.0.1:8767/login")
            await page.evaluate(
                f"localStorage.setItem('dscons_jwt_token', '{token}'); localStorage.setItem('dscons_token', '{token}'); localStorage.setItem('dscons_user', '{user_payload}');"
            )

            # Navigate to agent models dashboard
            await page.goto(
                "http://127.0.0.1:8767/dashboard/agent-models", wait_until="networkidle"
            )
            await page.wait_for_timeout(2500)

            screenshot_path = os.path.join(
                ARTIFACT_DIR, "10_e2e_agent_models_dashboard.png"
            )
            await page.screenshot(path=screenshot_path, full_page=True)
            print(f"[SUCCESS] Captured authenticated dashboard to {screenshot_path}")

            await browser.close()
    finally:
        server.should_exit = True
        await server_task


if __name__ == "__main__":
    asyncio.run(main())
