#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Verifikasi carousel TS Law PK Narkotika: status/jam/tipe/replies + URUTAN slide.

1. Baca balik 3 jadwal dari API -> cetak status, scheduleAt, type, medias[] berurutan.
2. Bukti urutan: matriks rata-rata beda pixel antara file PNG kiriman Bos (1..6.png)
   dan file yang dipasang di jadwal (tslaw_pk_narkotika_01..06.jpg).
   Diagonal (slide ke-n vs file ke-n) harus paling kecil di barisnya.
3. Bikin contact sheet bukti visual -> /tmp/tslaw_car_pk_contact.jpg
"""
import json
import sys
import urllib.request

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE  # noqa: E402
from PIL import Image, ImageStat, ImageDraw  # noqa: E402

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
SRC = [f"{WS}/tslaw_car_ts2/{i}.png" for i in range(1, 7)]
DST = [f"{WS}/openclaw-img/tslaw_pk_narkotika_{i:02d}.jpg" for i in range(1, 7)]

ids = json.load(open("/tmp/tslaw_car_pk_ids.json"))
jadwal = {}
for item in ids:
    req = urllib.request.Request(f"{BASE}/public/schedule/{item['id']}", headers=HEADERS)
    with urllib.request.urlopen(req, timeout=60) as r:
        d = json.load(r)
    doc = d.get("doc", d)
    jadwal[item["label"]] = doc
    urls = [m.get("url", "").split("/")[-1] for m in (doc.get("medias") or [])]
    print(f"{item['label']:8s} | {doc.get('status'):8s} | {doc.get('scheduleAt')} | "
          f"type={doc.get('type')} | replies={len(doc.get('replies') or [])} | "
          f"cap={len(doc.get('description') or '')}")
    print(f"         media: {urls}")

# bukti urutan
thumb = lambda p: Image.open(p).convert("L").resize((64, 80), Image.LANCZOS)
src_t = [thumb(p) for p in SRC]
dst_t = [thumb(p) for p in DST]
print("\nmatriks rata-rata beda pixel (baris = file terpasang _01.._06, kolom = PNG kiriman 1..6):")
rows = []
for i, a in enumerate(dst_t, 1):
    baris = []
    for j, b in enumerate(src_t, 1):
        m = ImageStat.Stat(Image.eval(a, lambda x: x)).mean  # placeholder
        diff = Image.new("L", a.size)
        diff.paste(a)
        import PIL.ImageChops as C
        d = C.difference(a, b)
        baris.append(round(ImageStat.Stat(d).mean[0], 2))
    rows.append(baris)
    terpilih = baris.index(min(baris)) + 1
    tanda = "OK" if terpilih == i else "TERTUKAR"
    print(f"  _0{i} -> argmin kolom {terpilih} {tanda} :: {baris}")
diag = [rows[i][i] for i in range(6)]
off = [rows[i][j] for i in range(6) for j in range(6) if i != j]
print(f"  diagonal {min(diag):.2f}-{max(diag):.2f} | off-diagonal {min(off):.2f}-{max(off):.2f}")
print("  kesimpulan:", "URUTAN BENAR (diagonal terkecil di tiap baris)" if all(
    rows[i].index(min(rows[i])) == i for i in range(6)) else "PERIKSA ULANG")

# contact sheet
from PIL import ImageOps
cols, tw = 3, 360
th = int(tw * 1350 / 1080)
sheet = Image.new("RGB", (cols * tw, 2 * (th + 26)), "white")
dr = ImageDraw.Draw(sheet)
for k in range(6):
    im = Image.open(DST[k]).convert("RGB").resize((tw, th), Image.LANCZOS)
    x, y = (k % cols) * tw, (k // cols) * (th + 26)
    sheet.paste(im, (x, y + 26))
    dr.text((x + 8, y + 7), f"SLIDE {k+1}  ({DST[k].split('/')[-1]})", fill="black")
sheet.save("/tmp/tslaw_car_pk_contact.jpg", "JPEG", quality=88)
print("\ncontact sheet -> /tmp/tslaw_car_pk_contact.jpg")
