"""Bind and pack the external shelf in editable source, without changing kit.glb."""
import bpy,json
from pathlib import Path
R=Path(__file__).parent
bpy.ops.wm.open_mainfile(filepath=str(R/'kit.blend'))
for name,d in json.loads((R/'materials.json').read_text())['materials'].items():
 m=bpy.data.materials.get(name)
 if not m:continue
 nt=m.node_tree;bs=next(n for n in nt.nodes if n.type=='BSDF_PRINCIPLED')
 for kind,path in d['maps'].items():
  im=bpy.data.images.load(str(R/path),check_existing=True);im.colorspace_settings.name='sRGB' if kind=='BaseColor' else 'Non-Color';im.pack();im.filepath='//'+path
  tex=nt.nodes.new('ShaderNodeTexImage');tex.image=im
  if kind=='BaseColor':nt.links.new(tex.outputs['Color'],bs.inputs['Base Color'])
  elif kind=='Normal':
   normal=nt.nodes.new('ShaderNodeNormalMap');nt.links.new(tex.outputs['Color'],normal.inputs['Color']);nt.links.new(normal.outputs[0],bs.inputs['Normal'])
  elif kind=='ORM':
   sep=nt.nodes.new('ShaderNodeSeparateColor');nt.links.new(tex.outputs['Color'],sep.inputs[0]);nt.links.new(sep.outputs['Green'],bs.inputs['Roughness']);nt.links.new(sep.outputs['Blue'],bs.inputs['Metallic'])
bpy.ops.wm.save_as_mainfile(filepath=str(R/'kit.blend'))
print('SOURCE_SHELF_PACKED')
