from pathlib import Path
import base64,csv,io,json,hashlib,platform,datetime
p=Path(__file__).parent
plain=b'name,count\r\nALPHA,1\r\n'
out={'python':platform.python_version(),'generated_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'cases':[]}
for name,raw in [('plain.csv',plain),('bom.csv',b'\xef\xbb\xbf'+plain),('interior.csv',plain+b'\xef\xbb\xbfBETA,2\r\n')]:
    encoded=base64.b64encode(raw);decoded=base64.b64decode(encoded,validate=True)
    (p/name).write_bytes(raw);(p/(name+'.b64.txt')).write_bytes(encoded)
    rows=[]
    for enc in ['utf-8','utf-8-sig']:
        reader=csv.DictReader(io.StringIO(decoded.decode(enc),newline=''));data=list(reader)
        try:lookup=data[0]['name'];error=None
        except KeyError as exc:lookup=None;error=type(exc).__name__
        rows.append({'encoding':enc,'fields':reader.fieldnames,'first_key_codepoints':[f'U+{ord(c):04X}' for c in reader.fieldnames[0]],'rows':data,'name_lookup':lookup,'error':error})
    out['cases'].append({'file':name,'bytes':len(raw),'base64_characters':len(encoded),'prefix_hex':raw[:6].hex(' '),'sha256':hashlib.sha256(raw).hexdigest(),'roundtrip_equal':raw==decoded,'decoders':rows})
(p/'raw-output.json').write_text(json.dumps(out,ensure_ascii=True,indent=2),encoding='utf8')
print(json.dumps(out,ensure_ascii=True))
