"""PROTOTYP — wegwerfen. Prüft jedes Code-Bild: Das Logo (alles, was vom reinen Umfärben
abweicht) muss in der festgeschriebenen Fläche liegen; ohne Fläche darf es kein Logo geben."""
import glob, json, os, re, sys
import numpy as np
from PIL import Image
from bilder import ANSICHTEN, HIER
from platzierung import flaeche, umfaerben
from stufen import STUFEN

SCHATTENRAND = 4  # Auflageschatten darf knapp über die Fläche hinaus
ergebnisse = json.load(open(os.path.join(HIER, "ergebnis.json")))
farbe = {re.sub(r"[^a-z0-9]+", "-", n.lower()).strip("-"): r["farbe"] for n, r in ergebnisse.items()}
seite = {d: s for d, _, s in ANSICHTEN}


def abweichung(pfad, basis):
    a = np.array(Image.open(pfad).convert("RGBA")).astype(int)
    b = np.array(basis).astype(int)
    diff = np.abs(a - b).max(-1) > 12
    ys, xs = np.where(diff)
    return None if len(xs) == 0 else (xs.min(), ys.min(), xs.max() + 1, ys.max() + 1)


fehler, geprueft = [], 0
for ordner in ["gen3", "gen3s", "gen3k"]:
    for pfad in sorted(glob.glob(os.path.join(HIER, ordner, "*", "*.png"))):
        name = os.path.basename(pfad)[:-4]
        if name == "logo":
            continue
        slug = os.path.basename(os.path.dirname(pfad))
        datei, k, ab, immer = name, None, None, False
        if ordner == "gen3k":
            datei, kurz = name.rsplit("-k", 1)
            _, k, ab = next(s for s in STUFEN if s[0] == "k" + kurz)
            immer = True
        basis = umfaerben(datei, seite[datei], farbe[slug], k, ab, immer)
        box, fl = abweichung(pfad, basis), flaeche(datei)
        geprueft += 1
        if fl is None:
            if box:
                fehler.append(f"{ordner}/{slug}/{name}: Logo auf Ansicht ohne Fläche {box}")
            continue
        if box is None:
            fehler.append(f"{ordner}/{slug}/{name}: kein Logo gefunden")
            continue
        r = SCHATTENRAND
        if box[0] < fl["x"] - r or box[1] < fl["y"] - r or box[2] > fl["x"] + fl["w"] + r or box[3] > fl["y"] + fl["h"] + r:
            fehler.append(f"{ordner}/{slug}/{name}: Logo {box} ragt aus Fläche {fl}")
print(f"{geprueft} Bilder geprüft, {len(fehler)} Fehler")
print("\n".join(fehler))
sys.exit(1 if fehler else 0)
