import struct, json, sys

p = sys.argv[1]
b = open(p, 'rb').read()
magic, ver, total = b[:4], *struct.unpack('<II', b[4:12])
print('dosya boyutu :', len(b))
print('magic/sürüm  :', magic, ver, 'başlıktaki toplam:', total)
off = 12
chunks = []
while off + 8 <= len(b):
    ln, ty = struct.unpack('<I4s', b[off:off+8])
    chunks.append((ty.decode('ascii', 'replace'), ln, off + 8))
    off += 8 + ln
print('chunklar     :', [(c[0], c[1]) for c in chunks])
js = json.loads(b[chunks[0][2]:chunks[0][2]+chunks[0][1]].decode('utf-8'))
print('asset        :', js.get('asset'))
print('extUsed      :', js.get('extensionsUsed'))
print('extRequired  :', js.get('extensionsRequired'))
print('sahne/düğüm  :', len(js.get('scenes', [])), len(js.get('nodes', [])))
print('mesh/mat     :', len(js.get('meshes', [])), len(js.get('materials', [])))
print('img/tex/smp  :', len(js.get('images', [])), len(js.get('textures', [])), len(js.get('samplers', [])))
print('buffers      :', js.get('buffers'))
for i, im in enumerate(js.get('images', [])):
    print('  img', i, {k: v for k, v in im.items() if k != 'uri'},
          ('uri=' + str(im['uri'])[:60]) if 'uri' in im else '')
for i, m in enumerate(js.get('materials', [])):
    print('  mat', i, json.dumps(m)[:300])
for i, me in enumerate(js.get('meshes', [])):
    for pr in me.get('primitives', []):
        print('  mesh', i, 'attr', list(pr.get('attributes', {}).keys()),
              'mode', pr.get('mode'), 'mat', pr.get('material'), 'idx', pr.get('indices'))
acc = js.get('accessors', [])
print('accessor sayısı:', len(acc))
tri = 0
for me in js.get('meshes', []):
    for pr in me.get('primitives', []):
        if pr.get('indices') is not None:
            tri += acc[pr['indices']]['count'] // 3
print('toplam üçgen :', tri)
