import adsk.core, adsk.fusion, json, traceback, pathlib, time
OUT=pathlib.Path(C28_ROOT)
BASE=OUT/'inputs/final27'
try:
    app=adsk.core.Application.get()
    opts=app.importManager.createSTEPImportOptions(str(BASE/'cad/Walkie_One_Concept_27_R2_REFERENCE_ASSEMBLY.step'))
    doc=app.importManager.importToNewDocument(opts)
    design=adsk.fusion.Design.cast(app.activeProduct)
    root=design.rootComponent
    doc.name='Walkie One 28 Chalk Ember - Fusion R1'
    def bb(b):
        q=b.boundingBox
        return [v*10 for v in [q.minPoint.x,q.maxPoint.x,q.minPoint.y,q.maxPoint.y,q.minPoint.z,q.maxPoint.z]]
    inv=[]
    for c in design.allComponents:
        inv.append({'name':c.name,'id':c.id,'bodies':[{'name':b.name,'volume_mm3':b.volume*1000,'solid':b.isSolid,'bbox_mm':bb(b),'faces':b.faces.count} for b in c.bRepBodies]})
    (OUT/'audit/fusion_import_inventory.json').write_text(json.dumps({'applicationVersion':app.version,'designType':design.designType,'components':inv},indent=2))
    export=design.exportManager
    export.execute(export.createFusionArchiveExportOptions(str(OUT/'cad/Concept_28_R1_Imported_27_Baseline.f3d')))
    app.activeViewport.fit()
    (OUT/'audit/import_done.txt').write_text('Imported Version 27 final R2 into Autodesk Fusion. Baseline archive saved.\n')
    print('27 final R2 imported. Inventory and native baseline saved.')
except:
    (OUT/'audit/import_error.txt').write_text(traceback.format_exc())
    print(traceback.format_exc())
