import asyncio
import sys
from pathlib import Path

from playwright.async_api import async_playwright

if sys.stdout.encoding != "utf-8":
    sys.stdout.reconfigure(encoding="utf-8")

ARTIFACTS_DIR = Path(
    r"C:\Users\Admin\.gemini\antigravity\brain\426dce59-44b6-48d1-b56c-c1257c771e41"
)
ARTIFACTS_DIR.mkdir(parents=True, exist_ok=True)


async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        context = await browser.new_context(viewport={"width": 1560, "height": 950})
        page = await context.new_page()

        # -------------------------------------------------------------
        # 0. AUTHENTICATE AS SUPERADMIN
        # -------------------------------------------------------------
        print("0. Logging in as SuperAdmin via /login...")
        await page.goto("http://127.0.0.1:8000/login", wait_until="domcontentloaded")
        await page.wait_for_timeout(800)

        # Click SuperAdmin quick login
        admin_btn = page.locator("button:has-text('SuperAdmin')")
        if await admin_btn.is_visible():
            await admin_btn.click()
            await page.wait_for_timeout(1500)
        print("   Logged in successfully! Current page:", page.url)

        # -------------------------------------------------------------
        # 1. VERIFY MATERIAL PRICE COMPARISON & FULL CATALOG (3 TABS)
        # -------------------------------------------------------------
        print("1. Testing Material Price Comparison & Full Catalog page...")
        await page.goto(
            "http://127.0.0.1:8000/dashboard/material-prices", wait_until="networkidle"
        )
        await page.wait_for_timeout(1500)

        # Screenshot Tab 1: Full State Price Catalog (100+ Danh mục công bố)
        shot1 = ARTIFACTS_DIR / "material_prices_full_catalog.png"
        await page.screenshot(path=str(shot1), full_page=True)
        print(f"   [OK] Saved screenshot Tab 1 (Full Catalog): {shot1}")

        # Switch to Tab 2: Side-by-Side Comparison
        await page.locator("#tabNavComparison").click()
        await page.wait_for_timeout(1000)
        shot2 = ARTIFACTS_DIR / "material_prices_bidding_comparison.png"
        await page.screenshot(path=str(shot2), full_page=True)
        print(f"   [OK] Saved screenshot Tab 2 (Bidding Comparison): {shot2}")

        # Switch to Tab 3: Machinery & Labor
        await page.locator("#tabNavMachinery").click()
        await page.wait_for_timeout(1000)
        shot3 = ARTIFACTS_DIR / "material_prices_machinery_labor.png"
        await page.screenshot(path=str(shot3), full_page=True)
        print(f"   [OK] Saved screenshot Tab 3 (Machinery & Labor): {shot3}")

        # Switch back to Tab 1 & filter by category pill (BẢNG GIÁ CA MÁY)
        await page.locator("#tabNavCatalog").click()
        await page.wait_for_timeout(600)
        machinery_pill = page.locator("button.category-pill:has-text('CA MÁY')")
        if await machinery_pill.is_visible():
            await machinery_pill.click()
            await page.wait_for_timeout(800)
        shot4 = ARTIFACTS_DIR / "material_prices_equipment_filter.png"
        await page.screenshot(path=str(shot4), full_page=True)
        print(f"   [OK] Saved screenshot Tab 1 Filtered: {shot4}")

        # -------------------------------------------------------------
        # 2. VERIFY DRAWING TAKEOFF HUB & AI QUỲNH TRAINING STUDIO
        # -------------------------------------------------------------
        print("2. Testing Drawing Takeoff Hub & AI Quỳnh Training Studio...")
        await page.goto(
            "http://127.0.0.1:8000/dashboard/drawing-takeoff", wait_until="networkidle"
        )
        await page.wait_for_timeout(2000)

        # Tab 1: BoQ Table View
        shot5 = ARTIFACTS_DIR / "drawing_takeoff_boq_view.png"
        await page.screenshot(path=str(shot5), full_page=True)
        print(f"   [OK] Saved screenshot BoQ Table: {shot5}")

        # Switch to Tab 2: AI Quỳnh Training Studio & Live Chat
        await page.locator("#tabBtnChatTrain").click()
        await page.wait_for_timeout(1000)

        # Click Quick Prompt Chip
        quick_chip = page.locator(".quick-chip").first
        if await quick_chip.is_visible():
            await quick_chip.click()
            await page.wait_for_timeout(400)

        # Click Send Feedback Button
        send_btn = page.locator("#btnSendChatTraining")
        if await send_btn.is_visible():
            await send_btn.click()
            await page.wait_for_timeout(3000)

        shot6 = ARTIFACTS_DIR / "ai_quynh_chat_training_studio.png"
        await page.screenshot(path=str(shot6), full_page=True)
        print(f"   [OK] Saved screenshot AI Quỳnh Training Studio: {shot6}")

        # Switch to Tab 3: Learned Rules Memory Bank
        await page.locator("#tabBtnLearnedRules").click()
        await page.wait_for_timeout(1000)

        shot7 = ARTIFACTS_DIR / "ai_quynh_learned_rules_bank.png"
        await page.screenshot(path=str(shot7), full_page=True)
        print(f"   [OK] Saved screenshot Learned Rules Memory Bank: {shot7}")

        await browser.close()
        print(">>> ALL BROWSER E2E VERIFICATION STEPS AND SCREENSHOTS SUCCEEDED 100%!")


if __name__ == "__main__":
    asyncio.run(main())
