#!/usr/bin/env python3
"""Diff pixel entre deux dossiers de screenshots (baseline vs current).
Usage: compare.py <baselineDir> <currentDir> [outDiffDir]
Sortie: % de pixels différents par page, triés. Génère des images de diff si outDiffDir.
Hauteurs différentes => comparaison sur la hauteur commune + pénalité signalée.
"""
import sys, os
from PIL import Image, ImageChops

base_dir, cur_dir = sys.argv[1], sys.argv[2]
diff_dir = sys.argv[3] if len(sys.argv) > 3 else None
if diff_dir:
    os.makedirs(diff_dir, exist_ok=True)

results = []
for name in sorted(os.listdir(base_dir)):
    if not name.endswith(".png"):
        continue
    bpath, cpath = os.path.join(base_dir, name), os.path.join(cur_dir, name)
    if not os.path.exists(cpath):
        results.append((name, 100.0, "MANQUANT côté current"))
        continue
    b, c = Image.open(bpath).convert("RGB"), Image.open(cpath).convert("RGB")
    note = ""
    if b.size != c.size:
        note = f"tailles {b.size}≠{c.size}"
        w = min(b.width, c.width)
        h = min(b.height, c.height)
        b, c = b.crop((0, 0, w, h)), c.crop((0, 0, w, h))
    diff = ImageChops.difference(b, c)
    # pixel différent = au moins un canal qui diffère de > 12 (tolérance antialiasing)
    gray = diff.convert("L")
    hist = gray.histogram()
    total = b.width * b.height
    differing = sum(hist[13:])
    pct = 100.0 * differing / total
    if diff_dir and pct > 0.5:
        gray.point(lambda v: 255 if v > 12 else 0).save(os.path.join(diff_dir, name))
    results.append((name, pct, note))

for name, pct, note in sorted(results, key=lambda r: -r[1]):
    flag = "✅" if pct < 1.0 else ("⚠️ " if pct < 5.0 else "❌")
    print(f"{flag} {pct:6.2f}%  {name}  {note}")
