#!/usr/bin/env python

import c3d
import sys


def print_metadata(reader):
    print('Header information:\n{}'.format(reader.header))
    for key, g in sorted(reader.iteritems()):
        if isinstance(key, int):
            continue
        print('')
        for key, p in sorted(g.iteritems()):
            shaped = ''
            dim = ' {}'.format(p.dimensions if p.dimensions else '')
            raw = p.bytes
            if p.bytes:
                raw = '{}{}'.format(repr(p.bytes[:8]), ['', '...'][len(p.bytes) > 8])
                if len(p.dimensions) == 0:
                    get = {2: g.get_uint16, 4: g.get_float}.get(len(p.bytes), g.get_uint8)
                    shaped = ' -> {}'.format(get(key))
            print('{0.name}.{1.name}: {1.total_bytes}B{2} {3}{4}'.format(g, p, dim, raw, shaped))
            if len(p.dimensions) == 2:
                C, R = p.dimensions
                for r in range(R):
                    print('{0.name}.{1.name}[{4}]: {5}'.format(
                        g, p, C, R, r, repr(p.bytes[r * C:(r+1) * C])))


if __name__ == '__main__':
    if len(sys.argv) == 1:
        print('Usage: %s FILE...' % sys.argv[0])
        sys.exit(1)
    for f in sys.argv[1:]:
        print('*** %s ***' % f)
        with open(f) as handle:
            print_metadata(c3d.Reader(handle))
