import test from 'node:test'
import assert from 'node:assert/strict'
import { createInspection } from '../src/facade/inspection'

const shape = { id: 'box', label: 'Box', volume: 120, area: 148, structuralValid: true, bounds: { min: [0, 0, 0] as [number, number, number], max: [4, 5, 6] as [number, number, number] }, topoRefs: [{ persistentId: 'Face1', kind: 'face' as const, status: 'stable' as const }] }

test('inspection measures points, vectors and registered shape values', () => {
  const inspection = createInspection()
  inspection.registerShape(shape)
  assert.equal(inspection.measureDistance('distance', [0, 0, 0], [3, 4, 0]).value, 5)
  assert.equal(inspection.measureAngle('angle', [1, 0, 0], [0, 1, 0]).value, 90)
  assert.equal(inspection.measureShape('volume', 'box', 'volume').value, 120)
  assert.equal(inspection.measureShape('area', 'box', 'area').unit, 'mm2')
  assert.equal(inspection.measureDeviation('deviation', 10, 10.01, 0.02).status, 'resolved')
  assert.equal(inspection.section('box', 3).area, 20)
  assert.deepEqual(inspection.topoRefReport('box'), { total: 1, stable: 1, unresolved: [] })
  assert.equal(inspection.exportCsv().trim().split('\n').length, 6)
})

test('inspection reports missing dependencies and isolates snapshots', () => {
  const inspection = createInspection()
  inspection.registerShape({ ...shape, id: 'child', dependencies: ['missing'] })
  assert.deepEqual(inspection.checkDependencies(), ['child->missing'])
  const snapshot = inspection.snapshot(); snapshot.shapes[0].bounds.min[0] = 99
  assert.equal(inspection.snapshot().shapes[0]?.bounds.min[0], 0)
  assert.equal(inspection.measureAngle('invalid', [0, 0, 0], [1, 0, 0]).status, 'invalid')
})
