from PIL import Image,ImageChops,ImageDraw
import numpy as np,json
from pathlib import Path
root=Path(__file__).parent
report={}
for size in (1440,390):
 for theme in ('light','dark'):
  key=f'{size}-{theme}';a=Image.open(root/f'before-{key}-1.png').convert('RGB');b=Image.open(root/f'after-{key}-1.png').convert('RGB')
  assert a.size==b.size
  diff=np.abs(np.array(a).astype(int)-np.array(b).astype(int));maxdiff=diff.max(axis=2)
  for threshold,label in [(0,'0'),(16,'16')]:
   mask=maxdiff>threshold
   out=np.zeros_like(diff,dtype=np.uint8);out[mask]=np.clip(diff[mask]*8,0,255).astype(np.uint8)
   Image.fromarray(out).save(root/f'diff{label}-{key}.png')
  report[key]={'png':a.size,'changed_pixels_0':int((maxdiff>0).sum()),'changed_pixels_16':int((maxdiff>16).sum()),'still_pairs_identical':{side:ImageChops.difference(Image.open(root/f'{side}-{key}-1.png'),Image.open(root/f'{side}-{key}-2.png')).getbbox() is None for side in ('before','after')}}
  images=[a,b,Image.open(root/f'diff0-{key}.png'),Image.open(root/f'diff16-{key}.png')]
  sheet=Image.new('RGB',(1000,600),'white');d=ImageDraw.Draw(sheet)
  for i,im in enumerate(images):
   im.thumbnail((500,275));x=i%2*500;y=i//2*300;sheet.paste(im,(x,y+25));d.text((x,y),['Before','After','Diff0 x8','Diff16 x8'][i],fill='black')
  sheet.save(root/f'inspect-pair-{key}.png')
(root/'pixel-report.json').write_text(json.dumps(report,indent=2))
print(json.dumps(report,indent=2))
