import adsk.core, adsk.fusion, json, pathlib, traceback
OUT=pathlib.Path(C28_ROOT)
app=adsk.core.Application.get();design=adsk.fusion.Design.cast(app.activeProduct);root=design.rootComponent
rows=[]
for o in root.allOccurrences:
    c=o.component
    row={'name':c.name,'transform':o.transform2.asArray(),'basefeatures':c.features.baseFeatures.count}
    if any(s in c.name for s in ['Front_Action_Rigid','Status_Lens','01_Front','PTT_Grip']):
        row['faces']=[]
        for b in o.bRepBodies:
            for f in b.faces:
                q=f.boundingBox
                g=f.geometry
                ff={'type':g.objectType,'area_mm2':f.area*100,'bbox_mm':[v*10 for v in [q.minPoint.x,q.maxPoint.x,q.minPoint.y,q.maxPoint.y,q.minPoint.z,q.maxPoint.z]]}
                if hasattr(g,'radius'):ff['radius_mm']=g.radius*10
                row['faces'].append(ff)
    rows.append(row)
libs=[]
for lib in app.materialLibraries:
    libs.append({'name':lib.name,'appearanceNames':[a.name for a in lib.appearances]})
(OUT/'audit/fusion_interfaces.json').write_text(json.dumps(rows,indent=2))
(OUT/'audit/fusion_appearances.json').write_text(json.dumps(libs,indent=2))
print('Interfaces and appearances inspected.')
