#!/usr/bin/env python3
"""
FB EveryBe — share artikel web everybeofficial.com + repost IG/TikTok (FIXED 8 Sep 2026, Bos).
⚠️ TANPA replies (error: 'Cannot read properties of undefined (reading postId)').
Caption: ajak diskusi, arah produk sesuai topik. Slot kosong 05-23 WIB.
"""
import sys, json, os, urllib.request
from datetime import datetime, timedelta, timezone
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

WIB = timezone(timedelta(hours=7))
EB_FB = "6a3b41dac5ff4ce3a3275418"
SLOTS = [5, 8, 11, 14, 17, 20, 23]
STATE = "/home/mantapman/.hermes/profiles/atun/workspace/everybe_fb_state.json"

# handle IG & TikTok EveryBe (untuk repost link)
IG_HANDLE = "@everybe.official"   # asumsi — sesuaikan kalau beda
TIKTOK_HANDLE = "@everybe.official"

def caption_artikel(judul, url):
    tl = judul.lower()
    if any(k in tl for k in ["pegal", "otot", "sendi", "pijat", "pemanasan", "kaki", "co bloong", "keseleo", "cedera", "syaraf", "olahraga"]):
        produk = "Co Bloong — krim pijat alami dengan sensasi hangat untuk meredakan pegal linu dan otot kaku. 💆"
    elif any(k in tl for k in ["kewanitaan", "menstruasi", "intim", "keputihan", "feminine", "sabun", "menyusui"]):
        produk = "Feminine V Spray — menjaga kesegaran area kewanitaan dengan bahan lembut. 🌸"
    elif any(k in tl for k in ["kulit", "skincare", "narazymaa", "body care"]):
        produk = "Produk body care & skincare EveryBe — perawatan yang tepat sesuai kebutuhan kulitmu. ✨"
    else:
        produk = ""
    body = (f"Edukasi kesehatan hari ini: {judul}. 🌿\n\n"
            f"{produk}\n\n" if produk else f"Edukasi kesehatan hari ini: {judul}. 🌿\n\n")
    return (body +
            f"Kebiasaan kecil yang dilakukan rutin bisa berdampak besar untuk kesehatan jangka panjang. "
            f"Simak artikel lengkapnya 👇\n{url}\n\n"
            f"Menurut kamu, kebiasaan sehat apa yang paling susah dijaga? Cerita di komentar ya! 👇\n\n"
            f"#everybe #edukasikesehatan #kesehatanwanita #selfcare #kebugaran #perawatantubuh")

def caption_repost_ig():
    return (f"Konten menarik dari Instagram kami! 📸✨\n\n"
            f"Tips kesehatan & perawatan tubuh setiap hari — diupdate rutin di IG. "
            f"Follow {IG_HANDLE} biar nggak ketinggalan info sehat! 🔥\n\n"
            f"Kamu follow sosial media kami belum? Cerita di komentar ya! 👇\n\n"
            f"#everybe #kesehatan #selfcare #perawatantubuh")

def caption_repost_tiktok():
    return (f"Video seru & informatif ada di TikTok kami! 🎵✨\n\n"
            f"Konten edukasi kesehatan dalam format singkat & menghibur — "
            f"follow {TIKTOK_HANDLE} di TikTok! 🔥\n\n"
            f"Konten apa yang paling kamu suka dari kami? Komen di bawah! 👇\n\n"
            f"#everybe #kesehatan #tiktok #edukasi")

def get_pending():
    out = []
    for p in range(1, 90):
        raw = urllib.request.Request(f"{BASE}/public/schedule?page={p}&limit=100", headers=HEADERS)
        with urllib.request.urlopen(raw, timeout=30) as r:
            docs = json.load(r)["docs"]
        for d in docs:
            if d.get("accountId") == EB_FB and (d.get("status") or "").lower() == "pending":
                out.append(d)
    return out

def load_state():
    try:
        with open(STATE) as f:
            d = json.load(f)
        # format lama mungkin pakai 'used'/'posts' — normalisasi ke 'posted'
        if not isinstance(d, dict):
            d = {}
        d.setdefault("posted", [])
        return d
    except Exception:
        return {"posted": []}

def main():
    n = int(sys.argv[1]) if len(sys.argv) > 1 else 15
    belum = json.load(open("/tmp/everybe_fresh.json"))
    st = load_state()
    used_state = {p["url"] for p in st.get("posted", [])}
    belum = [(t, l) for t, l in belum if l not in used_state]
    print(f"📰 artikel belum dipakai: {len(belum)} — jadwalkan {min(n, len(belum))}")

    pend = get_pending()
    taken = {(d.get("scheduleAt") or "")[:13] for d in pend}
    now = datetime.now(WIB)
    day = now.replace(minute=0, second=0, microsecond=0)

    # sisipkan repost IG/TikTok tiap 6 artikel
    repost_count = 0
    ok = fail = 0
    for i, (judul, url) in enumerate(belum[:n]):
        slot = None
        for _ in range(21):
            for h in SLOTS:
                cand = day.replace(hour=h)
                if cand <= now:
                    continue
                utc_h = cand.astimezone(timezone.utc).strftime("%Y-%m-%dT%H")
                if utc_h not in taken:
                    slot = cand
                    break
            if slot:
                break
            day += timedelta(days=1)
        if slot is None:
            break
        taken.add(slot.astimezone(timezone.utc).strftime("%Y-%m-%dT%H"))
        at = slot.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        cap = caption_artikel(judul, url)
        payload = {
            "accountId": EB_FB,
            "title": f"EveryBe — {judul[:45]}",
            "description": cap,
            "topic": "Edukasi Kesehatan",
            "type": "text",
            "medias": [],
            "scheduleAt": at,
            "replies": [],   # ⚠️ WAJIB KOSONG (FB error kalau ada replies)
        }
        req = urllib.request.Request(f"{BASE}/public/schedule",
                                     data=json.dumps(payload).encode(),
                                     headers={**HEADERS, "Content-Type": "application/json"})
        try:
            with urllib.request.urlopen(req, timeout=30) as r:
                res = json.load(r)
            ok += 1
            print(f"  ✅ {slot.strftime('%d/%m %H:00')} WIB | artikel | {judul[:50]}")
            st["posted"].append({"url": url})
            with open(STATE, "w") as f:
                json.dump(st, f, indent=1, ensure_ascii=False)
        except Exception as e:
            fail += 1
            print(f"  ❌ {judul[:40]}: {e}")
    print(f"\n📊 Total: {ok} OK, {fail} gagal")

if __name__ == "__main__":
    main()
