"""Playwright automation test script for Invoice Item Recognition, Equipment Truth Extraction,
and Warehouse Materials Staging UI.
"""

import asyncio
import os
import sys
from pathlib import Path

from playwright.async_api import async_playwright

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")

BASE_URL = os.environ.get("TEST_BASE_URL", "http://127.0.0.1:8000")
ARTIFACTS_DIR = Path(
    r"C:\Users\Admin\.gemini\antigravity-ide\brain\7a484f5f-1abe-4f97-84de-ac6b53252110"
)


async def test_truth_extraction_ui():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        context = await browser.new_context(viewport={"width": 1440, "height": 960})
        page = await context.new_page()

        # Handle dialogs automatically
        page.on("dialog", lambda dialog: asyncio.create_task(dialog.accept()))

        # Step 1: Login
        print("[1] Logging in...")
        await page.goto(f"{BASE_URL}/login", wait_until="networkidle")
        await page.click("button:has-text('SuperAdmin')")
        await page.wait_for_url("**/dashboard", timeout=10000)

        # Step 2: Go to Invoices Dashboard
        print("[2] Navigating to Invoices Dashboard...")
        await page.goto(f"{BASE_URL}/dashboard/invoices", wait_until="networkidle")
        await page.wait_for_timeout(1500)

        # Step 3: Switch to Tab 4 (Truth Staging)
        print("[3] Switching to Tab 4 (Truth Staging)...")
        tab_btn = page.locator("#tab-btn-module-inventory-truth")
        await tab_btn.click()
        await page.wait_for_timeout(1500)

        # Step 4: Click Trigger Truth Extraction
        print("[4] Triggering Ground Truth extraction from invoices...")
        extract_btn = page.locator("#btn-trigger-truth-extract")
        if await extract_btn.count() > 0:
            await extract_btn.click()
            await page.wait_for_timeout(3500)

        # Step 5: Capture Warehouse Materials view
        p_mat = ARTIFACTS_DIR / "inventory_truth_staging_materials.png"
        await page.screenshot(path=str(p_mat))
        print(f"[5] Saved Warehouse Materials screenshot: {p_mat}")

        # Step 6: Switch to Equipment Subtab
        print("[6] Switching to Equipment Assets sub-tab...")
        eq_subtab = page.locator("#subtab-btn-equipment")
        await eq_subtab.click()
        await page.wait_for_timeout(1200)

        # Step 7: Capture Equipment Truth view
        p_eq = ARTIFACTS_DIR / "inventory_truth_staging_equipment.png"
        await page.screenshot(path=str(p_eq))
        print(f"[7] Saved Equipment Truth screenshot: {p_eq}")

        await browser.close()
        print(
            "[SUCCESS] All Playwright browser verification steps for Truth Extraction completed!"
        )


if __name__ == "__main__":
    asyncio.run(test_truth_extraction_ui())
