"""Drop shelf materials a kit's GLBs never use (Astra kits copy the whole village shelf): keeps the game pack small.
usage: python3 tools/prune_shelf.py <kit_dir> [Keep_material ...]   (keep = materials code uses by name, e.g. ground)"""
import glob, json, os, struct, sys
kit, keep = sys.argv[1], set(sys.argv[2:])
used = set(keep)
for g in glob.glob(f'{kit}/*.glb'):
    b = open(g, 'rb').read(); n = struct.unpack('<I', b[12:16])[0]
    used |= {m.get('name') for m in json.loads(b[20:20 + n]).get('materials', [])}
p = f'{kit}/materials.json'; shelf = json.load(open(p)); mats = shelf.get('materials', shelf)
drop = [k for k in mats if k not in used]
for k in drop:
    for f in glob.glob(f'{kit}/materials/{k}_*'):
        os.remove(f)
    del mats[k]
json.dump(shelf, open(p, 'w'), indent=1)
print('kept', sorted(mats), 'dropped', drop)
