import asyncio
import os
import sys
from pathlib import Path

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")

from playwright.async_api import async_playwright

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\1792ecf6-90bc-4f3d-b8ab-2b680d6b356b"
)
ARTIFACTS_DIR.mkdir(parents=True, exist_ok=True)


async def test_equipment_tabs():
    print(f"[TEST] Testing Equipment Dashboard Tabs on {BASE_URL}...", flush=True)

    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        context = await browser.new_context(viewport={"width": 1600, "height": 1000})
        page = await context.new_page()

        # 1. Login
        print("[1] Logging in as SuperAdmin...", flush=True)
        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)

        # 2. Open Equipment Dashboard
        print("[2] Navigating to /dashboard/equipment...", flush=True)
        await page.goto(f"{BASE_URL}/dashboard/equipment", wait_until="networkidle")
        await page.wait_for_timeout(2000)

        # Verify Tab 1 (Machinery)
        kpi_machines = await page.inner_text("#kpi-total-machines")
        kpi_val = await page.inner_text("#kpi-equipment-value")
        print(f"  -> KPI Machines: {kpi_machines}, KPI Value: {kpi_val}", flush=True)

        ss_tab1 = ARTIFACTS_DIR / "equip_tab1_machinery_fixed.png"
        await page.screenshot(path=str(ss_tab1), full_page=True)
        print(f"  -> Saved Tab 1 screenshot: {ss_tab1}", flush=True)

        # 3. Click Subtab 2: Vehicles
        print("[3] Clicking Subtab 2: Đội Xe Vận Tải...", flush=True)
        await page.click("#subtab-vehicles-btn")
        await page.wait_for_timeout(1000)

        is_tab2_visible = await page.is_visible("#tab-vehicles")
        print(f"  -> Tab 2 is visible: {is_tab2_visible}", flush=True)
        assert is_tab2_visible, "Tab 2 (Vehicles) failed to show!"

        ss_tab2 = ARTIFACTS_DIR / "equip_tab2_vehicles_fixed.png"
        await page.screenshot(path=str(ss_tab2), full_page=True)
        print(f"  -> Saved Tab 2 screenshot: {ss_tab2}", flush=True)

        # 4. Click Subtab 3: Truth Assets
        print(
            "[4] Clicking Subtab 3: Danh Mục Tài Sản Thiết Bị Sở Hữu (Truth Staging)...",
            flush=True,
        )
        await page.click("#subtab-truth-btn")
        await page.wait_for_timeout(1000)

        is_tab3_visible = await page.is_visible("#tab-truth")
        print(f"  -> Tab 3 is visible: {is_tab3_visible}", flush=True)
        assert is_tab3_visible, "Tab 3 (Truth Assets) failed to show!"

        truth_rows = await page.locator("#truth-equipment-table-body tr").count()
        print(f"  -> Tab 3 has {truth_rows} equipment rows.", flush=True)
        assert truth_rows > 0, "No equipment rows rendered in Tab 3!"

        ss_tab3 = ARTIFACTS_DIR / "equip_tab3_truth_assets_fixed.png"
        await page.screenshot(path=str(ss_tab3), full_page=True)
        print(f"  -> Saved Tab 3 screenshot: {ss_tab3}", flush=True)

        # 5. Click back to Tab 1
        print("[5] Clicking back to Subtab 1: Đội Máy Cơ Giới...", flush=True)
        await page.click("#subtab-machinery-btn")
        await page.wait_for_timeout(1000)

        is_tab1_visible = await page.is_visible("#tab-machinery")
        print(f"  -> Tab 1 is visible: {is_tab1_visible}", flush=True)
        assert is_tab1_visible, "Tab 1 (Machinery) failed to switch back!"

        await browser.close()
        print(
            "[SUCCESS] All equipment tabs verified with interactive switching and dynamic data!",
            flush=True,
        )


if __name__ == "__main__":
    asyncio.run(test_equipment_tabs())
