# -*- coding: utf-8 -*-
"""스캔 결과(json)에서 도메인+컨테이너클래스 시그니처로 사이트를 벤더 클러스터링."""
import json, sys, re
from collections import defaultdict
sys.stdout.reconfigure(encoding='utf-8')
R = json.load(open(r'D:\01.프로젝트\DB수집\작업파일\_temp\_tab_rescan_report.json', encoding='utf-8'))

def vendor_sig(r):
    cls = r.get('classes') or []
    # 클래스명에서 페이지별 suffix 제거(tab_sub01_02 → tab_sub)
    norm = []
    for c in cls:
        c2 = re.sub(r'_(sub|cont|page)?[\d_]+', '', c).strip()
        norm.append(c2)
    base = norm[0] if norm else '(무탭/기타)'
    return base

clusters = defaultdict(list)
for r in R:
    if not r.get('ok'):
        clusters['(에러)'].append(r['name']); continue
    if not r.get('groups'):
        clusters['(탭0)'].append(r['name']); continue
    clusters[vendor_sig(r)].append(f"{r['name']}({r['prov'][:2]}{'·검수완료' if r['inspected'] else ''})")

print('=== 벤더(컨테이너 클래스) 클러스터 ===')
for sig, sites in sorted(clusters.items(), key=lambda x:-len(x[1])):
    print(f'\n[{sig}] — {len(sites)}곳')
    print('   ', ', '.join(sites))
