# -*- coding: utf-8 -*-
# [2026-07-22] 판 그룹선택 수정 실측: 넓은 판 클릭 시 선택 삼각형 수(수정전 _selectAutoRegion vs 수정후 _selectGroupRegion)
# 진짜 클릭 대신, 로드된 실제 메쉬/그룹정보 위에서 두 선택함수를 동일 seed로 호출해 크기를 실측한다.
import sys, io
from playwright.sync_api import sync_playwright

URL = "http://localhost:8091/DOZIKWORKS_OS_v5_locked.dc.html"

JS = r"""
() => {
  const app = window.__dzw;
  if(!app || !app._knuckleMesh) return {err:'mesh not loaded'};
  const gid = app._faceGroupId;
  if(!gid) return {err:'faceGroupId missing'};
  // 그룹별 대표 seed(각 그룹 첫 삼각형)와 크기
  const first={}, size={};
  for(let i=0;i<gid.length;i++){ const g=gid[i]; if(first[g]===undefined) first[g]=i; size[g]=(size[g]||0)+1; }
  const E=window.DZW5_EDGEPATH, EN=window.DZW5_ENGINE;
  const rows=[];
  for(const g of Object.keys(size).sort((a,b)=>size[b]-size[a])){
    const seed=first[g];
    let autoN=-1;
    try{ autoN=E._selectAutoRegion(app._knuckleMesh,seed).size; }catch(e){ autoN='ERR:'+e.message; }
    let grpN=-1;
    try{ grpN=E._selectGroupRegion(app,app._knuckleMesh,seed).size; }catch(e){ grpN='ERR:'+e.message; }
    rows.push({group:+g, name:(app._faceGroupNames||[])[g]||'?', groupTris:size[g], seedFace:seed, oldAuto:autoN, newGroup:grpN});
  }
  // 판A 누적 단조증가 실측: 서로 다른 3개 그룹을 순차 클릭 시 누적 크기
  const bigGroups=Object.keys(size).sort((a,b)=>size[b]-size[a]).slice(0,3).map(Number);
  app._faceARegion=null;
  const accum=[];
  for(const g of bigGroups){
    const seed=first[g];
    const region=E._selectGroupRegion(app,app._knuckleMesh,seed);
    if(!app._faceARegion) app._faceARegion=new Set();
    for(const t of region) app._faceARegion.add(t);
    accum.push({clickedGroup:g, cumSize:app._faceARegion.size});
  }
  // 같은 그룹 재클릭 시 누적이 폭증하지 않고 유지되는지
  const gRep=bigGroups[0];
  const before=app._faceARegion.size;
  const r2=E._selectGroupRegion(app,app._knuckleMesh,first[gRep]);
  for(const t of r2) app._faceARegion.add(t);
  const afterSameClick=app._faceARegion.size;
  return {rows, accum, sameGroupReclick:{before, after:afterSameClick}};
}
"""

def main():
    with sync_playwright() as p:
        b = p.chromium.launch()
        pg = b.new_page()
        errs=[]
        pg.on("console", lambda m: errs.append(m.text) if m.type=="error" else None)
        pg.goto(URL, wait_until="networkidle", timeout=30000)
        # 메쉬 로드 대기
        pg.wait_for_function("() => window.__dzw && window.__dzw._knuckleMesh && window.__dzw._faceGroupId", timeout=20000)
        res = pg.evaluate(JS)
        b.close()
        import json
        print(json.dumps(res, ensure_ascii=False, indent=2))
        if errs: print("CONSOLE ERRORS:", errs[:5])

if __name__=="__main__":
    main()
