# 판A 색칠 z-fight 수정 시각 검증 (2026-07-12)
# CEO가 안 보인다고 한 faceIndex(7381, 7070, 4703)로 색칠 → 스크린샷 저장
from playwright.sync_api import sync_playwright
import sys

URL = "http://localhost:8090/DOZIKWORKS_OS_v5_locked.dc.html"
OUT = "05_BROWSER_TESTS/_region_color_shot.png"

with sync_playwright() as p:
    b = p.chromium.launch()
    pg = b.new_page(viewport={"width": 1600, "height": 900})
    errs = []
    pg.on("pageerror", lambda e: errs.append(str(e)))
    pg.goto(URL)
    pg.wait_for_function("window.__dzw && window.__dzw._knuckleMesh && window.DZW5_EDGEPATH", timeout=60000)
    pg.wait_for_timeout(3000)

    r = pg.evaluate("""() => {
      const a = window.__dzw;
      a._faceARegion = new Set();
      for (const fi of [7381, 7070, 4703]) {
        const rg = DZW5_EDGEPATH._selectAutoRegion(a._knuckleMesh, fi);
        for (const t of rg) a._faceARegion.add(t);
      }
      DZW5_EDGEPATH._showRegion(a, a._faceARegion, a._knuckleMesh, 0xFF0000, '_faceAMesh', '_faceABorder');
      const m = a._faceAMesh;
      return {tris: a._faceARegion.size, mesh: !!m,
              po: m ? m.material.polygonOffset : null,
              dt: m ? m.material.depthTest : null};
    }""")
    print("REGION:", r)
    # 제품이 화면에 크게 보이도록 FIT
    pg.evaluate("() => { const a=window.__dzw; if(a.fitView) a.fitView(); }")
    pg.wait_for_timeout(1500)
    pg.screenshot(path=OUT)
    print("SHOT:", OUT)
    print("CONSOLE_ERRORS:", len(errs), errs[:3])
    b.close()
    sys.exit(0 if r["mesh"] and r["po"] and r["dt"] else 1)
