from playwright.sync_api import sync_playwright
import os, json

SCREENSHOT_DIR = "/home/jay/workspace/memory/screenshots/insuro-e2e"
BASE_URL = "http://127.0.0.1:5173"
results = []
all_console_errors = []

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)

    # === Group 2A: CRM pages ===
    context = browser.new_context(viewport={"width": 1280, "height": 720})
    page = context.new_page()
    page.on("console", lambda msg: all_console_errors.append({"type": msg.type, "text": msg.text, "url": page.url}) if msg.type == "error" else None)

    crm_pages = [
        ("/crm/customers", "04-crm-customers.png"),
        ("/crm/pipeline", "04-crm-pipeline.png"),
        ("/crm/messenger", "04-crm-messenger.png"),
    ]

    for path, screenshot_name in crm_pages:
        errors_before = len(all_console_errors)
        try:
            page.goto(f"{BASE_URL}{path}", wait_until="networkidle", timeout=15000)
            page.wait_for_timeout(2000)
            page.screenshot(path=os.path.join(SCREENSHOT_DIR, screenshot_name), full_page=True)
            new_errors = all_console_errors[errors_before:]
            results.append({
                "path": path,
                "screenshot": screenshot_name,
                "status": "OK",
                "final_url": page.url,
                "console_errors": len(new_errors),
                "error_details": [e["text"][:200] for e in new_errors]
            })
        except Exception as e:
            results.append({
                "path": path,
                "screenshot": screenshot_name,
                "status": "FAIL",
                "error": str(e)[:300]
            })

    context.close()

    # === Group 2B: Premium lock check ===
    context2 = browser.new_context(viewport={"width": 1280, "height": 720})
    page2 = context2.new_page()
    page2.on("console", lambda msg: all_console_errors.append({"type": msg.type, "text": msg.text, "url": page2.url}) if msg.type == "error" else None)

    premium_pages = ["/ai-onestop", "/ai-automation", "/info-keyword"]
    for pp in premium_pages:
        try:
            page2.goto(f"{BASE_URL}{pp}", wait_until="networkidle", timeout=15000)
            page2.wait_for_timeout(2000)
            # Check for lock overlay or upgrade CTA
            lock_overlay = page2.query_selector("[data-testid='locked-feature-overlay'], .locked-feature-overlay, [class*='LockedFeature'], [class*='locked'], [class*='upgrade'], [class*='Upgrade']")
            upgrade_cta = page2.query_selector("text=업그레이드, text=Upgrade, text=프리미엄, text=Premium, button:has-text('업그레이드'), a:has-text('업그레이드')")
            page2.screenshot(path=os.path.join(SCREENSHOT_DIR, f"05-locked-{pp.replace('/', '-').strip('-')}.png"), full_page=True)
            results.append({
                "path": pp,
                "check": "premium_lock",
                "lock_overlay_found": lock_overlay is not None,
                "upgrade_cta_found": upgrade_cta is not None,
                "status": "OK",
                "page_content_snippet": page2.inner_text("body")[:500] if page2.query_selector("body") else "empty"
            })
        except Exception as e:
            results.append({"path": pp, "check": "premium_lock", "status": "FAIL", "error": str(e)[:300]})

    context2.close()

    # === Group 2C: Mobile responsive ===
    mobile_context = browser.new_context(viewport={"width": 375, "height": 812})
    mobile_page = mobile_context.new_page()
    mobile_page.on("console", lambda msg: all_console_errors.append({"type": msg.type, "text": msg.text, "url": mobile_page.url}) if msg.type == "error" else None)

    try:
        mobile_page.goto(f"{BASE_URL}/intro", wait_until="networkidle", timeout=15000)
        mobile_page.wait_for_timeout(2000)
        # Check for mobile bottom nav
        bottom_nav = mobile_page.query_selector("[data-testid='mobile-bottom-nav'], .mobile-bottom-nav, [class*='MobileBottomNav'], [class*='mobile-nav'], nav[class*='bottom'], [class*='bottomNav']")
        mobile_page.screenshot(path=os.path.join(SCREENSHOT_DIR, "06-mobile-375px.png"), full_page=False)
        results.append({
            "path": "/intro (mobile 375px)",
            "check": "mobile_responsive",
            "mobile_bottom_nav_found": bottom_nav is not None,
            "status": "OK",
            "viewport": "375x812"
        })
    except Exception as e:
        results.append({"path": "/intro", "check": "mobile_responsive", "status": "FAIL", "error": str(e)[:300]})

    # Also check /login on mobile
    try:
        mobile_page.goto(f"{BASE_URL}/login", wait_until="networkidle", timeout=15000)
        mobile_page.wait_for_timeout(2000)
        mobile_page.screenshot(path=os.path.join(SCREENSHOT_DIR, "06-mobile-login-375px.png"), full_page=False)
        results.append({
            "path": "/login (mobile 375px)",
            "check": "mobile_responsive",
            "status": "OK"
        })
    except Exception as e:
        results.append({"path": "/login mobile", "status": "FAIL", "error": str(e)[:300]})

    mobile_context.close()
    browser.close()

# Save results
output = {
    "results": results,
    "total_console_errors": len(all_console_errors),
    "console_errors_detail": [{"type": e["type"], "text": e["text"][:200], "url": e["url"]} for e in all_console_errors[:50]]
}
with open(os.path.join(SCREENSHOT_DIR, "results_group2.json"), "w") as f:
    json.dump(output, f, indent=2, ensure_ascii=False)

print(json.dumps(output, indent=2, ensure_ascii=False))
