from pathlib import Path
import argparse,json
from PIL import Image
ROOT=Path(__file__).resolve().parent;p=argparse.ArgumentParser();p.add_argument('--output',required=True);a=p.parse_args();target=Path(a.output);target=target if target.is_absolute()else ROOT/target
assert target.is_dir(),'Actual output directory missing';rows=[];used=set()
for source in sorted((ROOT/'inputs').glob('*.png')):
 original=Image.open(source);candidates=[f for f in target.iterdir()if f.suffix.lower()in ['.png','.jpg','.jpeg','.webp']and(f.stem==source.stem or f.stem.startswith(source.stem+'_'))]
 assert len(candidates)==1,f'Need one unambiguous output for {source.name}, got {len(candidates)}'
 path=candidates[0];used.add(path);im=Image.open(path);im.load();rows.append({'source':source.name,'input_size':list(original.size),'output':path.name,'output_size':list(im.size),'format':im.format,'mode':im.mode,'scale_x':im.width/original.width,'scale_y':im.height/original.height})
extras=[x.name for x in target.iterdir()if x.suffix.lower()in ['.png','.jpg','.webp']and x not in used]
(ROOT/'output-report.json').write_text(json.dumps({'rows':rows,'unmapped':extras},indent=2)+'\n');assert not extras,'Unmapped result files';print(json.dumps(rows))
