# encoding: UTF-8
begin
  puts "###DZW-INV-COVERZONE-20260920"
  m = Sketchup.active_model
  ents = lambda { |s| s.is_a?(Sketchup::Group) ? s.entities : s.definition.entities }
  lab = lambda do |s|
    nm = (s.respond_to?(:name) ? s.name.to_s : '')
    dn = s.is_a?(Sketchup::ComponentInstance) ? s.definition.name.to_s : ''
    nm.empty? ? (dn.empty? ? '(무명)' : "def:#{dn}") : nm
  end
  sel = m.selection.to_a
  puts "선택 #{sel.length}개"
  sel.first(5).each do |e|
    if e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance)
      b = e.bounds
      puts "  SEL #{e.class} '#{lab.call(e)}' bbox(부모계) min=#{b.min.to_a.map { |v| v.to_mm.round(0) }.inspect} max=#{b.max.to_a.map { |v| v.to_mm.round(0) }.inspect}"
    else
      puts "  SEL #{e.class}"
    end
  end
  rows = []
  walk = nil
  walk = lambda do |ent, tr, path, depth|
    (ent.grep(Sketchup::Group) + ent.grep(Sketchup::ComponentInstance)).each do |s|
      l = lab.call(s)
      st = tr * s.transformation
      ps = []
      col = nil
      col = lambda do |en, t|
        en.grep(Sketchup::Edge).each { |ed| ed.vertices.each { |v| ps << v.position.transform(t) } }
        (en.grep(Sketchup::Group) + en.grep(Sketchup::ComponentInstance)).each { |q| col.call(ents.call(q), t * q.transformation) }
      end
      col.call(ents.call(s), st)
      unless ps.empty?
        xr = ps.map { |p| p.x.to_mm }.minmax
        yr = ps.map { |p| p.y.to_mm }.minmax
        zr = ps.map { |p| p.z.to_mm }.minmax
        if xr[1] >= 3850 && xr[0] <= 5400 && yr[1] >= 7450 && yr[0] <= 8850 && zr[0] < 400
          kids = (ents.call(s).grep(Sketchup::Group) + ents.call(s).grep(Sketchup::ComponentInstance)).map { |k| lab.call(k) }
          rows << [depth, "#{path}/#{l}", s.class.to_s, xr, yr, zr, kids]
        end
      end
      walk.call(ents.call(s), st, "#{path}/#{l}", depth + 1) if depth < 2
    end
  end
  walk.call(m.entities, Geom::Transformation.new, '', 0)
  puts "커버 구역 후보 #{rows.length}개 (깊이<=2, 자식 목록 포함)"
  rows.sort_by { |r| [r[0], r[1]] }.each do |d, p, cl, xr, yr, zr, kids|
    puts "  d#{d} #{cl} #{p}"
    puts "     X=#{xr.map { |v| v.round(0) }.inspect} Y=#{yr.map { |v| v.round(0) }.inspect} Z=#{zr.map { |v| v.round(0) }.inspect} 자식#{kids.length}: #{kids.first(14).inspect}"
  end
  puts "모델 수정 없음"
rescue Exception => e
  puts "EXC #{e.class}: #{e.message}"
  puts e.backtrace.first(5).join(" | ")
end
nil
