# -*- coding: utf-8 -*-
"""Pass 1: 1.23GB DXF를 스트리밍으로 훑어 엔티티 색인(bbox+레이어+텍스트)만 뽑는다."""
import json, time, collections
from ezdxf.addons import iterdxf

import product          # 제품 고유값 모음 — 기본값 500pro
SCR = product.SCR
DXF = product.DXF

counts = collections.Counter()
polys = []   # closed polylines: [handle, layer, xmin,ymin,xmax,ymax, nverts]
circles = [] # [handle, layer, cx, cy, r]
texts = []   # [handle, layer, x, y, string]
t0 = time.time()
n = 0
doc = iterdxf.opendxf(DXF)
try:
    for e in doc.modelspace():
        n += 1
        dt = e.dxftype()
        counts[dt] += 1
        try:
            if dt in ('LWPOLYLINE', 'POLYLINE'):
                if dt == 'LWPOLYLINE':
                    pts = [(p[0], p[1]) for p in e.get_points()]
                    closed = bool(e.closed)
                else:
                    pts = [(v.dxf.location.x, v.dxf.location.y) for v in e.vertices]
                    closed = bool(e.is_closed)
                if not closed or len(pts) < 3:
                    continue
                xs = [p[0] for p in pts]; ys = [p[1] for p in pts]
                polys.append([e.dxf.handle, e.dxf.layer, min(xs), min(ys), max(xs), max(ys), len(pts)])
            elif dt == 'CIRCLE':
                c = e.dxf.center
                circles.append([e.dxf.handle, e.dxf.layer, c.x, c.y, e.dxf.radius])
            elif dt in ('TEXT', 'MTEXT'):
                s = e.dxf.text if dt == 'TEXT' else e.text
                p = e.dxf.insert
                texts.append([e.dxf.handle, e.dxf.layer, p.x, p.y, str(s)[:120]])
        except Exception:
            pass
        if n % 200000 == 0:
            print('  ...%d entities, %.0fs' % (n, time.time()-t0), flush=True)
finally:
    doc.close()

print('total entities:', n, 'elapsed %.0fs' % (time.time()-t0))
print('counts:', dict(counts.most_common(20)))
print('closed polys:', len(polys), 'circles:', len(circles), 'texts:', len(texts))
json.dump({'counts': dict(counts), 'polys': polys, 'circles': circles, 'texts': texts},
          open(SCR + r'\index.json', 'w', encoding='utf-8'))
print('saved index.json')
