"""
Targeted Verification for Chat Input Focus Guard with Spacebar.
"""
from __future__ import annotations
import socketserver
import sys
import threading
from pathlib import Path
from typing import Any

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: str, *args: Any) -> None:
        pass


def test_chat_space():
    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:
            try:
                browser = p.chromium.launch(channel="msedge", headless=True)
            except Exception:
                browser = p.chromium.launch(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")

            # Open chat panel and focus input
            page.evaluate("""() => {
                document.getElementById('chat-minimized-bar')?.click();
                document.getElementById('chat-expanded-panel')?.classList.remove('hidden');
                document.getElementById('chat-input')?.focus();
            }""")
            page.wait_for_timeout(50)

            charges_before = page.evaluate("() => window.skillBarController?.slots?.get('dodge')?.charges")
            iframe_before = page.evaluate("() => window.player?.isIFrame")
            print(f"[CHAT FOCUS] charges_before={charges_before}, iframe_before={iframe_before}")

            # Type text with space
            page.keyboard.type("HELLO WORLD ")
            val = page.evaluate("() => document.getElementById('chat-input')?.value")
            charges_after = page.evaluate("() => window.skillBarController?.slots?.get('dodge')?.charges")
            iframe_after = page.evaluate("() => window.player?.isIFrame")
            print(f"[CHAT FOCUS] input_val='{val}', charges_after={charges_after}, iframe_after={iframe_after}")

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


if __name__ == "__main__":
    test_chat_space()
