import sys
import socketserver
import threading
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent.parent
sys.path.insert(0, str(PROJECT_ROOT))
from tools.serve_web_pc import FreeExilePCRequestHandler
from playwright.sync_api import sync_playwright

class SilentPCServer(FreeExilePCRequestHandler):
    def log_message(self, format, *args): pass

server = socketserver.TCPServer(('127.0.0.1', 0), SilentPCServer)
port = server.server_address[1]
threading.Thread(target=server.serve_forever, daemon=True).start()
base_url = f'http://127.0.0.1:{port}'

try:
    with sync_playwright() as p:
        browser = p.chromium.launch(channel="msedge", headless=True)
        page = browser.new_page(viewport={'width': 1920, 'height': 1080})
        page.add_init_script("try { localStorage.setItem('fe_sim_mode', 'fullscreen'); } catch(e){}")
        page.goto(f'{base_url}/index.html')
        page.wait_for_function('() => window.player && window.PcInputController')

        page.keyboard.press('KeyC')
        page.wait_for_timeout(100)
        page.keyboard.press('KeyI')
        page.wait_for_timeout(100)

        for step in range(1, 6):
            page.keyboard.press('Escape')
            page.wait_for_timeout(100)
            status = page.evaluate('''() => {
                const openModals = Array.from(document.querySelectorAll('#modal-container > div:not(.hidden)')).map(el => el.id);
                return {
                    openModals: openModals,
                    isGamePaused: window.isGamePaused,
                    overlayHidden: document.getElementById('overlay-pause')?.classList.contains('hidden')
                };
            }''')
            print(f'After Esc {step}:', status)

        browser.close()
finally:
    server.shutdown()
    server.server_close()
