import socketserver
import sys
import threading
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[3]))
from tools.serve_web_pc import FreeExilePCRequestHandler
from playwright.sync_api import sync_playwright

s = socketserver.TCPServer(('127.0.0.1', 0), FreeExilePCRequestHandler)
port = s.server_address[1]
threading.Thread(target=s.serve_forever, daemon=True).start()

print(f"Ephemeral server running on port {port}")

with sync_playwright() as p:
    try:
        b = p.chromium.launch(channel="msedge", headless=True)
    except Exception:
        b = p.chromium.launch(headless=True)

    # Completely fresh context (clean localStorage, 0 injected scripts)
    context = b.new_context(viewport={"width": 1920, "height": 1080})
    page = context.new_page()

    page_errors = []
    console_errors = []

    page.on("pageerror", lambda e: page_errors.append(str(e)))
    page.on("console", lambda m: console_errors.append(m.text) if m.type == "error" else None)

    page.goto(f"http://127.0.0.1:{port}/index.html")
    page.wait_for_timeout(2000)

    count = page.locator(".iphone-frame").count()
    mode = page.evaluate("() => localStorage.getItem('fe_sim_mode')")
    has_keys = page.evaluate("() => typeof window.keys === 'object' && window.keys !== null")
    has_pc_main = page.evaluate("() => typeof window.PcMain === 'object'")
    has_pc_hud = page.evaluate("() => typeof window.PcHudController === 'object'")
    app_viewport_class = page.evaluate("() => document.getElementById('app-viewport')?.className")

    print("PAGE_ERRORS:", page_errors)
    print("CONSOLE_ERRORS:", console_errors)
    print("IPHONE_FRAME_COUNT:", count)
    print("STORED_SIM_MODE:", mode)
    print("HAS_WINDOW_KEYS:", has_keys)
    print("HAS_PC_MAIN:", has_pc_main)
    print("HAS_PC_HUD:", has_pc_hud)
    print("APP_VIEWPORT_CLASS:", app_viewport_class)

    context.close()
    b.close()

s.shutdown()
