"""階段 4 前端 UI 驗證:meeting_summary 訊息正確渲染成卡片。"""

import asyncio
import sys
from pathlib import Path

try:
    sys.stdout.reconfigure(encoding="utf-8")
except (AttributeError, ValueError):
    pass

from playwright.async_api import async_playwright

HERE = Path(__file__).resolve().parent
PROFILE_DIR = HERE / "profile"
OUT_DIR = HERE / "out"

ROBERT = {"email": "ssbb30529@gmail.com", "password": "a183b729"}


async def main():
    async with async_playwright() as pw:
        ctx = await pw.chromium.launch_persistent_context(
            user_data_dir=str(PROFILE_DIR / "robert"),
            headless=False,
            args=["--disable-blink-features=AutomationControlled"],
            viewport={"width": 1280, "height": 900},
        )
        try:
            page = await ctx.new_page()
            page.set_default_timeout(15000)
            await page.goto("http://localhost:8000", wait_until="domcontentloaded")
            await page.evaluate("localStorage.clear()")
            await page.reload(wait_until="domcontentloaded")
            await page.wait_for_selector("#login-view", state="visible")
            await page.fill("#email", ROBERT["email"])
            await page.fill("#password", ROBERT["password"])
            await page.click("#login-btn")
            await page.wait_for_selector("#dashboard-view", state="visible")
            await page.click('button.section-tab[data-section="chat"]')
            await asyncio.sleep(1)

            # 滾到底
            await page.evaluate("document.getElementById('chat-messages').scrollTop = 999999")
            await asyncio.sleep(0.5)

            # 確認會議卡片渲染
            card_count = await page.locator(".chat-msg-meeting").count()
            results = []
            if card_count > 0:
                results.append(f"PASS: 渲染了 {card_count} 個會議摘要卡片")
            else:
                results.append("FAIL: 沒看到任何會議摘要卡片")

            # 確認決策標題
            decisions = await page.locator(".meeting-decision").count()
            results.append(f"PASS: {decisions} 個決策卡" if decisions else "FAIL: 沒決策")

            # 確認 action item 按鈕
            convert_btns = await page.locator('button[data-action="convert-action-item"]').count()
            converted_btns = await page.locator(".meeting-action-btn.converted").count()
            results.append(f"PASS: {convert_btns} 個未轉/{converted_btns} 個已轉按鈕")

            # 截圖
            await page.locator(".chat-msg-meeting").last.scroll_into_view_if_needed()
            await asyncio.sleep(0.3)
            await page.screenshot(path=str(OUT_DIR / "stage_4_meeting.png"), full_page=False)
            print(f"截圖:{OUT_DIR}/stage_4_meeting.png")

            print("\n" + "=" * 60)
            for r in results:
                print(r)
            print("=" * 60)

        finally:
            await ctx.close()


if __name__ == "__main__":
    asyncio.run(main())
