"""[feetech_calib] Inspect umi_gripper_v3_handle.urdf: joints + meshes, and test MuJoCo load."""
import re, os, sys
URDF = "umi_gripper_v3_handle.urdf"
x = open(URDF).read()
print("=== joints ===")
for m in re.finditer(r'<joint name="([^"]+)" type="([^"]+)">(.*?)</joint>', x, re.S):
    n, t, b = m.group(1), m.group(2), m.group(3)
    ax = re.search(r'<axis xyz="([^"]+)"', b)
    lo = re.search(r'lower="([^"]+)"', b); hi = re.search(r'upper="([^"]+)"', b)
    print(f"  {n} [{t}] axis={ax.group(1) if ax else '-'} limits=({lo.group(1) if lo else '-'},{hi.group(1) if hi else '-'})")
meshes = sorted(set(re.findall(r'filename="([^"]+)"', x)))
print(f"=== {len(meshes)} meshes ===")
for f in meshes: print("  ", f, "OK" if os.path.exists(f) else "MISSING")

print("=== mujoco load test ===")
try:
    import mujoco
    model = mujoco.MjModel.from_xml_path(URDF)
    print(f"  LOADED njnt={model.njnt} nq={model.nq}")
    for i in range(model.njnt):
        jn = mujoco.mj_id2name(model, mujoco.mjtObj.mjOBJ_JOINT, i)
        jt = int(model.jnt_type[i]); adr = int(model.jnt_qposadr[i])
        rng = model.jnt_range[i]
        tn = {0:'free',1:'ball',2:'slide',3:'hinge'}.get(jt, jt)
        print(f"    joint '{jn}' type={tn} qposadr={adr} range={rng}")
    xmlout = mujoco.mj_saveLastXML  # existence check
    print("  (mujoco can compile this URDF)")
except Exception as e:
    print("  LOAD FAILED:", repr(e))
