#!/usr/bin/env python3
"""TSLaw 16 Okt: cari kandidat foto Pexels lewat jalur cadangan (r.jina.ai -> ID -> CDN),
lalu buat dua lembar kontak supaya bisa diperiksa sekaligus."""
import os, re, urllib.request, urllib.error
from PIL import Image, ImageDraw, ImageFont

UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}
OUT = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_listikel"
os.makedirs(OUT, exist_ok=True)
QUERIES = ["car accident document", "insurance claim form", "law office desk documents",
           "police report document", "traffic accident report"]


def jina(u, n=600000):
    try:
        with urllib.request.urlopen(urllib.request.Request("https://r.jina.ai/" + u, headers=UA), timeout=120) as x:
            return x.read(n).decode("utf-8", "replace")
    except Exception as e:
        return f"__GAGAL__ {type(e).__name__}"


ids = {}
for q in QUERIES:
    t = jina("https://www.pexels.com/search/" + q.replace(" ", "%20") + "/")
    ketemu = list(dict.fromkeys(re.findall(r"pexels-photo-(\d{4,})", t)))[:12]
    ids[q] = ketemu
    print(f"{q:<28} {len(ketemu)} id: {ketemu[:12]}")

semua = list(dict.fromkeys([i for v in ids.values() for i in v]))
print(f"\ntotal id unik: {len(semua)}")

ok = []
for pid in semua:
    u = f"https://images.pexels.com/photos/{pid}/pexels-photo-{pid}.jpeg?auto=compress&cs=tinysrgb&w=1600"
    p = f"{OUT}/_k{pid}.jpg"
    if os.path.exists(p):
        ok.append(pid)
        continue
    try:
        with urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=90) as x:
            open(p, "wb").write(x.read())
        ok.append(pid)
    except Exception as e:
        print(f"  gagal {pid}: {type(e).__name__}")

print(f"terunduh: {len(ok)}")


def kontak(daftar, nama):
    kol, bar, sel = 4, (len(daftar) + 3) // 4, 260
    c = Image.new("RGB", (kol * sel, bar * (sel + 22)), "white")
    d = ImageDraw.Draw(c)
    try:
        f = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 16)
    except Exception:
        f = ImageFont.load_default()
    for i, pid in enumerate(daftar):
        im = Image.open(f"{OUT}/_k{pid}.jpg").convert("RGB")
        im.thumbnail((sel, sel), Image.LANCZOS)
        x, y = (i % kol) * sel, (i // kol) * (sel + 22)
        c.paste(im, (x + (sel - im.width) // 2, y + 22 + (sel - im.height) // 2))
        d.text((x + 4, y + 2), pid, fill="black", font=f)
    c.save(f"{OUT}/{nama}")
    print(f"  lembar kontak: {OUT}/{nama} {c.size}")


kontak(ok[:12], "_kontak18a.jpg")
if len(ok) > 12:
    kontak(ok[12:24], "_kontak18b.jpg")
if len(ok) > 24:
    kontak(ok[24:36], "_kontak18c.jpg")
