"""Remove ancillary render metadata without decoding or changing image pixels."""
from pathlib import Path
import struct
import hashlib
import json

root = Path(__file__).resolve().parent
receipts = []
for path in sorted(root.glob('boundary-study-*.jpg')):
    data = path.read_bytes()
    assert data[:2] == b'\xff\xd8'
    out = bytearray(data[:2])
    pos = 2
    removed = []
    while pos < len(data):
        assert data[pos] == 255
        marker = data[pos + 1]
        if marker in (0xDA, 0xD9):
            out.extend(data[pos:])
            break
        length = struct.unpack('>H', data[pos + 2:pos + 4])[0]
        segment = data[pos:pos + 2 + length]
        if marker == 0xFE or marker in (0xE1, 0xED):
            removed.append(hex(marker))
        else:
            out.extend(segment)
        pos += 2 + length
    path.write_bytes(out)
    receipts.append({'file': path.name, 'bytes': len(out), 'sha256': hashlib.sha256(out).hexdigest(), 'removed_segments': removed})
for path in sorted(root.glob('boundary-study-*.png')):
    data = path.read_bytes()
    out = bytearray(data[:8])
    pos = 8
    removed = []
    while pos < len(data):
        length = struct.unpack('>I', data[pos:pos + 4])[0]
        kind = data[pos + 4:pos + 8]
        if kind in (b'tEXt', b'zTXt', b'iTXt', b'eXIf'):
            removed.append(kind.decode('ascii'))
        else:
            out.extend(data[pos:pos + length + 12])
        pos += length + 12
    path.write_bytes(out)
    receipts.append({'file': path.name, 'bytes': len(out), 'sha256': hashlib.sha256(out).hexdigest(), 'removed_chunks': removed})
(root / 'export-metadata-receipt.json').write_text(json.dumps(receipts, indent=2) + '\n', encoding='utf-8')
print(json.dumps(receipts, indent=2))
