import threading
import time
import functools
import http.server
from pathlib import Path
from playwright.sync_api import sync_playwright

WEBAPP_DIR = Path('client/webapp').resolve()

class QuietHandler(http.server.SimpleHTTPRequestHandler):
    def log_message(self, format, *args):
        pass

server = http.server.ThreadingHTTPServer(('127.0.0.1', 8898), functools.partial(QuietHandler, directory=str(WEBAPP_DIR)))
server_thread = threading.Thread(target=server.serve_forever, daemon=True)
server_thread.start()

errors = []
logs = []

with sync_playwright() as p:
    browser = p.chromium.launch(channel='msedge', headless=True)
    page = browser.new_page()

    page.on('console', lambda msg: errors.append(msg.text) if msg.type == 'error' else logs.append(msg.text))
    page.on('pageerror', lambda exc: errors.append(str(exc)))

    page.goto('http://127.0.0.1:8898/index.html')
    time.sleep(2)

    has_engine = page.evaluate("typeof window.AnimationEngine !== 'undefined'")
    debug_anim = page.evaluate("window.__DEBUG_ANIM__")
    classes_loaded = page.evaluate("Object.keys(window.AnimationEngine.MANIFESTS)")

    print(f"AnimationEngine exists: {has_engine}")
    print(f"window.__DEBUG_ANIM__ default: {debug_anim}")
    print(f"Classes/manifests in engine: {classes_loaded}")
    print(f"Total console errors: {len(errors)}")
    if errors:
        for err in errors:
            print(f"  Console Error: {err}")

    browser.close()
server.shutdown()
