#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Ganti caption jadwal FB Yasma Natura yang sudah terpasang ke versi bahasa ngobrol.

Perintah Bos 5 Okt 2026: "untuk caption gunakan bahasa yang humanis".
Caption dibangun ulang dari artikel yang sama (link di caption tetap) memakai
`caption_artikel()` versi baru di fb_yasma_harian.py.

  python3 update_caption_fb_yasma.py            # dry run
  python3 update_caption_fb_yasma.py --go       # PUT ke Repliz + verifikasi baca balik
"""
import re
import sys
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client, ReplizError  # noqa: E402
import fb_yasma_harian as Y  # noqa: E402

WIB = timezone(timedelta(hours=7))
FB_YASMA = Y.FB_YASMA


def main():
    go = "--go" in sys.argv
    c = get_client()

    docs, page = [], 1
    while True:
        r = c.get_schedules(page=page, limit=100)
        d = r.get("docs") or r.get("data") or []
        if not d:
            break
        docs.extend(d)
        if len(d) < 100:
            break
        page += 1

    mine = [x for x in docs if x.get("accountId") == FB_YASMA
            and (x.get("status") or "").lower() == "pending"]
    mine.sort(key=lambda x: x.get("scheduleAt") or "")
    print("jadwal pending FB Yasma: %d" % len(mine))

    arts = Y.ambil_artikel()
    peta = {Y.norm(a["link"]): a for a in arts}
    print("artikel terbaca: %d" % len(arts))

    siap = []
    for s in mine:
        cap_lama = s.get("description") or ""
        m = re.search(r"https://yasmanatura\.co\.id/\S+", cap_lama)
        if not m:
            print("  ⚠️ %s: tidak ada link yasma di caption — lewati" % s.get("_id"))
            continue
        key = Y.norm(m.group(0))
        art = peta.get(key)
        if not art:
            print("  ⚠️ %s: artikel %s tidak ada di 60 terbaru — lewati" % (s.get("_id"), key))
            continue
        sa = s.get("scheduleAt") or ""
        dt = datetime.strptime(sa[:19], "%Y-%m-%dT%H:%M:%S").replace(tzinfo=timezone.utc).astimezone(WIB)
        cap_baru = Y.caption_artikel(art, dt.toordinal() % 4)
        masalah = Y.validasi(cap_baru, art["link"])
        siap.append({"id": s.get("_id"), "wib": dt, "lama": cap_lama, "baru": cap_baru,
                     "judul": art["judul"], "link": art["link"], "masalah": masalah})

    print("\n=== RENCANA (%d jadwal) ===" % len(siap))
    for i, k in enumerate(siap, 1):
        print("\n[%d] %s WIB | %s" % (i, k["wib"].strftime("%d %b %H:%M"), k["judul"][:70]))
        print("    panjang lama %d -> baru %d char | validasi: %s"
              % (len(k["lama"]), len(k["baru"]), k["masalah"] or "OK"))
        print("    --- caption BARU ---")
        print("    " + k["baru"].replace("\n", "\n    "))

    if not go:
        print("\n(dry run — tidak ada yang diubah. Tambahkan --go untuk menerapkan)")
        return

    print("\n=== PUT ===")
    ok = gagal = 0
    for k in siap:
        if k["masalah"]:
            print("  ❌ %s: validasi gagal %s — tidak diubah" % (k["id"], k["masalah"]))
            gagal += 1
            continue
        try:
            c.update_schedule(k["id"], {"description": k["baru"]})
            balik = c.get_schedule(k["id"])
            cap = balik.get("description") or ""
            cocok = cap.strip() == k["baru"].strip()
            st = balik.get("status")
            print("  %s %s %s WIB | status=%s | caption cocok: %s | %d char"
                  % ("✅" if cocok else "⚠️", k["id"], k["wib"].strftime("%d %b %H:%M"),
                     st, "ya" if cocok else "TIDAK", len(cap)))
            ok += 1 if cocok else 0
            gagal += 0 if cocok else 1
        except ReplizError as e:
            print("  ❌ %s: %s" % (k["id"], e))
            gagal += 1
    print("\nselesai: %d cocok, %d bermasalah" % (ok, gagal))


if __name__ == "__main__":
    try:
        main()
    except ReplizError as e:
        print("ReplizError:", e)
        sys.exit(1)
