#!/usr/bin/env python3
"""DAS: siapkan peta url gambar → ukuran dari pustaka media, untuk menambah srcset/dimensi/lazy.
Jalankan: python3 das_siap_gambar.py            (laporan saja)
"""
import base64, json, re, time, urllib.request, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_das", f"{WS}/cfg_das.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
CFG = m.CFG
DOM, AUTH = CFG["domain"], base64.b64encode(f'{CFG["user"]}:{CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}


def rest(p):
    r = urllib.request.Request(f"https://{DOM}{p}", headers={"Authorization": f"Basic {AUTH}", **UA})
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=200) as x:
                return json.loads(x.read())
        except Exception:
            time.sleep(5)
    return []


print("=== pustaka media ===")
media, page = [], 1
while True:
    d = rest(f"/wp-json/wp/v2/media?per_page=100&page={page}&per_page=100&_fields=id,source_url,media_details,alt_text")
    if not isinstance(d, list):
        break
    media += d
    if len(d) < 100:
        break
    page += 1
print(f"   {len(media)} berkas")

peta = {}
for it in media:
    det = it.get("media_details") or {}
    ukuran = {}
    for nama, s in (det.get("sizes") or {}).items():
        if s.get("source_url"):
            ukuran[nama] = {"url": s["source_url"], "w": s.get("width"), "h": s.get("height")}
    if it.get("source_url"):
        peta[it["source_url"].split("?")[0]] = {
            "id": it["id"], "w": det.get("width"), "h": det.get("height"),
            "alt": it.get("alt_text") or "", "sizes": ukuran}
print(f"   berkas dengan detail ukuran: {sum(1 for v in peta.values() if v['w'])}")

posts, page = [], 1
while True:
    d = rest(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status=publish&context=edit&_fields=id,slug,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1

cocok = tak_cocok = 0
contoh_cocok, contoh_tak = [], []
for p in posts:
    for tag in re.findall(r"<img[^>]*>", p.get("content", {}).get("raw", "") or "", re.I):
        src = re.search(r'src="([^"]+)"', tag)
        if not src:
            continue
        kunci = src.group(1).split("?")[0].strip()
        if kunci.startswith("//"):
            kunci = "https:" + kunci
        elif kunci.startswith("/"):
            kunci = "https://dasindonesia.com" + kunci
        elif not kunci.startswith("http"):
            kunci = "https://dasindonesia.com/" + kunci.lstrip("/")
        kunci = kunci.replace("http://dasindonesia.com", "https://dasindonesia.com")
        if kunci in peta:
            cocok += 1
            if len(contoh_cocok) < 4:
                contoh_cocok.append((kunci, peta[kunci]["w"], peta[kunci]["h"], sorted(peta[kunci]["sizes"].keys())[:6]))
        else:
            tak_cocok += 1
            if len(contoh_tak) < 6:
                contoh_tak.append(kunci)

print(f"\n   gambar di artikel yang cocok dengan pustaka media: {cocok}")
print(f"   yang tidak cocok (kemungkinan berkas lama/terhapus): {tak_cocok}")
for u, w, h, uk in contoh_cocok:
    print(f"      {w}x{h} | ukuran tersedia: {uk} | {u[-60:]}")
for u in contoh_tak:
    print(f"      tanpa data: {u[-70:]}")

json.dump(peta, open(f"{WS}/drafts/das_peta_media.json", "w"), indent=1, ensure_ascii=False)
print(f"\n→ drafts/das_peta_media.json")
