#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Cermin konten TS Law ke LinkedIn (perintah Bos 13 Okt 2026: "share ke semua sosmed TS Law").

Yang dipasang:
  1. Video "Pasal 411 KUHP" (tayang 16 Okt) → LinkedIn 08:00 WIB (01:00Z)
  2. Poster seri Mitos atau Fakta `tslaw_mitos_fakta_09.jpg` (tayang 17 Okt) → LinkedIn 09:00 WIB (02:00Z)
  3. Poster seri Mitos atau Fakta `tslaw_mitos_fakta_10.jpg` (tayang 19 Okt) → LinkedIn 09:00 WIB (02:00Z)

Caption disalin apa adanya dari jadwal IG padanannya. IDEMPOTEN: skip kalau media/url sudah ada di jadwal LinkedIn.
Pakai: /usr/bin/python3 mirror_tslaw_linkedin.py         (dry run)
       /usr/bin/python3 mirror_tslaw_linkedin.py --run   (eksekusi)
"""
import json
import sys
import urllib.parse
import urllib.request

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

LINKEDIN = "6a60101562caae1e04e901ac"
MODE = "run" if "--run" in sys.argv else "dry"

# (label, id jadwal sumber di akun lain, tipe, waktu tayang LinkedIn UTC)
JOBS = [
    ("Video Pasal 411 (16 Okt)", "6ace0b53c8961f9c338ea5f0", "video", "2026-10-16T01:00:00.000Z"),
    ("Mitos atau Fakta 09 — KTP jaminan (17 Okt)",
     "6ab10b6b3032e3a79cf2f689", "image", "2026-10-17T02:00:00.000Z"),
]


def semua_jadwal():
    docs, page = [], 1
    while True:
        q = urllib.parse.urlencode({"page": page, "limit": 100})
        req = urllib.request.Request(f"{BASE}/public/schedule?{q}", headers=HEADERS)
        with urllib.request.urlopen(req, timeout=60) as r:
            d = json.load(r)
        docs += d.get("docs", d.get("data", []))
        if not d.get("hasNextPage") or not docs:
            break
        page += 1
    return docs


# jadwal IG 19 Okt (mitos_fakta_10) belum ditulis di JOBS di atas; ambil dari daftar jadwal
ada = semua_jadwal()
for s in ada:
    if s.get("accountId") == "6a76a54d62caae1e04f30968" and "tslaw_mitos_fakta_10.jpg" in json.dumps(s):
        JOBS.append(("Mitos atau Fakta 10 (19 Okt)", s.get("_id") or s.get("id"), "image",
                     "2026-10-19T02:00:00.000Z"))
        break

cl = get_client()
mirip = {s.get("_id") or s.get("id"): s for s in ada}
for label, sid, tipe, at in JOBS:
    src = mirip.get(sid) or cl.get_schedule(sid)
    if not src:
        print(f"❌ {label}: jadwal sumber {sid} tidak ketemu")
        continue
    medias = src.get("medias") or []
    cap = src.get("description") or ""
    title = (src.get("title") or "TS Law") + " (LinkedIn)"
    url0 = (medias[0].get("url") if medias else "") or ""
    sudah = [s for s in ada if s.get("accountId") == LINKEDIN and url0 and url0 in json.dumps(s)]
    print(f"\n{label}\n  sumber {sid} | {src.get('type')} | {src.get('scheduleAt')} | media {url0.split('/')[-1]}")
    print(f"  → LinkedIn {at} | {tipe} | caption {len(cap)} char")
    if sudah:
        print(f"  ⏭️  sudah ada di LinkedIn (id {sudah[0].get('_id')}) → SKIP")
        continue
    if MODE != "run":
        print("  [DRY] belum dipasang")
        continue
    res = cl.create_schedule(LINKEDIN, cap, at, title=title, topic="Edukasi Hukum",
                             type_=tipe, medias=[{"url": url0, "type": tipe,
                                                  "alt": (medias[0].get("alt") if medias else "") or ""}],
                             replies=[])
    sid2 = res.get("scheduleId") or res.get("_id") or res.get("id")
    back = cl.get_schedule(sid2)
    bm = (back.get("medias") or [{}])[0]
    print(f"  ✅ dibuat id={sid2}")
    print(f"     baca-balik: status={back.get('status')} type={back.get('type')} "
          f"{back.get('scheduleAt')} media={bm.get('url', '').split('/')[-1]} replies={back.get('replies')}")
