#!/usr/bin/env python3
"""Tulis ulang caption reel IG StudioSoft yang masih menunggu tayang dengan format baru
(pembuka bervariasi, tanpa konten klinik). Pakai --go untuk menulis.

GET penuh dulu, ubah `description`, lalu PUT objek penuh (syarat API repliz).
"""
import importlib.util, json, re, sys, time, urllib.request, urllib.error

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
import repliz_client as rc

spec = importlib.util.spec_from_file_location("rw", f"{WS}/ss_ig_reel_warna.py")
rw = importlib.util.module_from_spec(spec)
try:
    spec.loader.exec_module(rw)
except SystemExit:
    pass

KUNCI = {"Authorization": rc.AUTH_HEADER, "Content-Type": "application/json"}
KATA_KLINIK = ("klinik", "pasien", "dokter", "rumah sakit", "praktik", "medis")


def get(sid):
    r = urllib.request.Request(f"https://api.repliz.com/public/schedule/{sid}", headers=KUNCI)
    d = json.loads(urllib.request.urlopen(r, timeout=60).read())
    return d.get("doc") if isinstance(d, dict) and "doc" in d else d


def put(sid, obj):
    body = {k: v for k, v in obj.items()
            if k not in ("_id", "id", "createdAt", "updatedAt", "__v", "doc")}
    r = urllib.request.Request(f"https://api.repliz.com/public/schedule/{sid}",
                               data=json.dumps(body).encode(), headers=KUNCI, method="PUT")
    with urllib.request.urlopen(r, timeout=90) as x:
        return x.status


d = json.load(open(f"{WS}/drafts/ig_jadwal_menunggu.json"))
reel = [j for j in d if str(j.get("type")).lower() == "video"]
print(f"reel menunggu tayang: {len(reel)}\n")

rencana = []
for j in reel:
    nama = ((j.get("medias") or [{}])[0].get("url") or "").split("/")[-1]
    m = re.search(r"ss_reel_(?:biru|putih)_(\d+)\.mp4", nama)
    if not m:
        print(f"  ⚠ {j['_id']} — nama media tidak dikenali: {nama}")
        continue
    num = m.group(1)
    if num not in rw.ALBUM:
        print(f"  ⚠ {j['_id']} — album {num} tidak ada di daftar (kemungkinan bertema klinik), dilewati")
        continue
    baru = rw.caption(num)
    lama = j.get("description") or ""
    berubah = baru.strip() != lama.strip()
    kena = [k for k in KATA_KLINIK if k in baru.lower()]
    rencana.append((j, num, lama, baru, berubah, kena))

print(f"akan diperbarui: {sum(1 for x in rencana if x[4])} dari {len(rencana)} reel")
for j, num, lama, baru, berubah, kena in rencana[:6]:
    status = "UBAH" if berubah else "sama"
    print(f"\n  {j['_id']} | album {num} | {j.get('_wb', j.get('_wib', ''))[:16]} | {status}")
    print(f"    lama: {lama.splitlines()[0][:90] if lama else '-'}")
    print(f"    baru: {baru.splitlines()[0][:90]}")
    if kena:
        print(f"    ⚠ masih menyebut: {kena}")

if "--go" not in sys.argv:
    print("\n(dry run — pakai --go)")
    sys.exit(0)

ok = gagal = 0
for j, num, lama, baru, berubah, kena in rencana:
    if not berubah:
        continue
    try:
        obj = get(j["_id"])
        obj["description"] = baru
        st = put(j["_id"], obj)
        balik = get(j["_id"]).get("description", "")
        cocok = balik.strip() == baru.strip()
        ok += cocok
        gagal += (not cocok)
        print(f"  {'✅' if cocok else '❌'} {j['_id']} HTTP {st} | panjang {len(baru)} char")
    except urllib.error.HTTPError as e:
        gagal += 1
        print(f"  ❌ {j['_id']} HTTP {e.code} {e.read().decode()[:100]}")
    except Exception as e:
        gagal += 1
        print(f"  ❌ {j['_id']} {str(e)[:90]}")
    time.sleep(0.3)

print(f"\n  berhasil: {ok} | gagal: {gagal}")
