"""Exact collision check for the wrap holder: boolean-intersection volume (mm^3)
between holder, yoke, and the servo STEP. ~0 = clear; >0 = interference.
Run with .venv_cad python (tom_patch dir on PYTHONPATH gives center() robustness).
"""
import sys
sys.path.insert(0, "/data/cameron/repos/smith300_para_stuff")
from build123d import import_step
from wrap_holder import make_wrap_holder
from yoke_exact import make_yoke_exact

SERVO_STEP = "/data/cameron/repos/cad_experiments/parts/waveshare_feetech_st3215_servo.step"

holder = make_wrap_holder()
yoke = make_yoke_exact()
servo = import_step(SERVO_STEP)
print(f"holder vol={holder.volume:.0f}  yoke vol={yoke.volume:.0f}")


def inter_vol(a, b, name):
    try:
        c = a & b
        v = 0.0 if c is None else float(c.volume)
    except Exception as e:
        print(f"{name}: ERROR {type(e).__name__}: {e}")
        return
    flag = "CLEAR" if v < 1.0 else "*** INTERFERENCE ***"
    print(f"{name}: {v:.2f} mm^3   {flag}")
    if v >= 1.0:
        try:
            bb = c.bounding_box()
            mn, mx = bb.min, bb.max
            print(f"    overlap bbox X[{mn.X:.1f},{mx.X:.1f}] Y[{mn.Y:.1f},{mx.Y:.1f}] Z[{mn.Z:.1f},{mx.Z:.1f}]")
        except Exception as e:
            print(f"    bbox ERR {e}")


inter_vol(holder, yoke, "holder & yoke ")
inter_vol(holder, servo, "holder & servo")
