#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
EveryBe FACEBOOK — jadwal harian edukasi (FIXED 1 Sep 2026, aturan Bos):
- 7 slot/hari: 05, 08, 11, 14, 17, 20, 23 WIB → isi slot KOSONG berikutnya
- Format NESTED: main + 2 replies (post2 balas post1, post3 balas post2)
- Materi artikel everybeofficial.com + link WAJIB
- Arah produk: kebugaran → Co Bloong, kewanitaan → Feminine V Spray, skincare → netral
- Caption wajib ajak diskusi, anti-redundant
"""
import sys, os, json, hashlib, 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))
ROOT = "/home/mantapman/.hermes/profiles/atun/workspace"
STATE = os.path.join(ROOT, "everybe_fb_state.json")
EB_FB = "6a3b41dac5ff4ce3a3275418"

SLOTS = [5, 8, 11, 14, 17, 20, 23]  # WIB

# Artikel edukasi belum dipakai FB (dari stok fit; state anti-redundant juga)
ARTIKEL = [
    ("Pentingnya Menjaga Kebersihan Kewanitaan Setiap Hari", "https://www.everybeofficial.com/pentingnya-menjaga-kebersihan-kewanitaan-setiap-hari/", "feminine"),
    ("Cara Alami Mengatasi Bau Tidak Sedap di Area Kewanitaan", "https://www.everybeofficial.com/cara-alami-mengatasi-bau-tidak-sedap-area-kewanitaan/", "feminine"),
    ("5 Gerakan Stretching untuk Pekerja Kantoran yang Sering Pegal", "https://www.everybeofficial.com/gerakan-stretching-pekerja-kantoran-pegal/", "cobloong"),
    ("7 Cara Memulai Gaya Hidup Sehat untuk Pekerja Sibuk", "https://www.everybeofficial.com/gaya-hidup-sehat-self-care-pekerja-sibuk/", "cobloong"),
    ("Co Bloong: Solusi Praktis untuk Pegal dan Otot Kaku", "https://www.everybeofficial.com/co-bloong-solusi-praktis-pegal-otot-kaku/", "cobloong"),
    ("Panduan Lengkap Pijat Otot Sendiri di Rumah untuk Pemula", "https://www.everybeofficial.com/panduan-pijat-otot-sendiri-di-rumah-untuk-pemula/", "cobloong"),
    ("Rutinitas Self-Care untuk Menjaga Kesehatan dan Kebugaran", "https://www.everybeofficial.com/rutinitas-self-care-menjaga-kesehatan/", "cobloong"),
    ("Menopause Dini: Kenali Gejala, Penyebab, dan Cara Mengatasinya", "https://www.everybeofficial.com/menopause-dini-gejala-penyebab-cara-mengatasi/", "feminine"),
    ("7 Tips Mencegah Menopause Dini", "https://www.everybeofficial.com/tips-mencegah-menopause-dini/", "feminine"),
    ("Sering Duduk Lama? 5 Risiko untuk Otot dan Sendi", "https://www.everybeofficial.com/sering-duduk-lama-risiko-otot-dan-sendi/", "cobloong"),
    ("Jangan Anggap Sepele! Bahaya Keputihan yang Nggak Normal", "https://www.everybeofficial.com/jangan-anggap-sepele-ini-bahaya-keputihan/", "feminine"),
    ("Feminine V Spray vs Sabun Kewanitaan", "https://www.everybeofficial.com/feminine-v-spray-vs-sabun-kewanitaan/", "feminine"),
    ("5 Penyebab Pegal Linu Kronis dan Cara Mengatasinya", "https://www.everybeofficial.com/7-penyebab-pegal-linu-kronis-atasi-co-bloong/", "cobloong"),
    ("7 Penyebab Nyeri Sendi yang Sering Diabaikan", "https://www.everybeofficial.com/7-penyebab-nyeri-sendi-yang-sering-diabaikan/", "cobloong"),
    ("5 Cara Mengatasi Pegal Setelah Olahraga", "https://www.everybeofficial.com/7-cara-mengatasi-pegal-setelah-olahraga-co-bloong/", "cobloong"),
    ("6 Langkah Pertolongan Pertama Keseleo yang Benar", "https://www.everybeofficial.com/7-langkah-pertolongan-pertama-keseleo-co-bloong/", "cobloong"),
    ("8 Tips Mempercepat Pemulihan Otot Cedera", "https://www.everybeofficial.com/7-tips-mempercepat-pemulihan-otot-cedera/", "cobloong"),
    ("Rahasia Kulit Glowing Alami: 5 Bahan dalam Body Care", "https://www.everybeofficial.com/bahan-alami-body-care-kulit-glowing/", "skincare"),
    ("Body Lotion vs Tone Up Lotion: Apa Bedanya?", "https://www.everybeofficial.com/body-lotion-vs-tone-up-lotion-perbedaan/", "skincare"),
    ("Skin Barrier Rusak? Kenali Tanda dan Cara Memperbaikinya", "https://www.everybeofficial.com/skin-barrier-rusak-tanda-penyebab-cara-memperbaiki/", "skincare"),
]

CTA = {
    "cobloong": "Buat kamu yang sering pegal setelah kerja atau olahraga, Co Bloong dari EveryBe bisa jadi solusi praktis — krim pijat dengan sensasi hangat yang bantu meredakan pegal linu dan otot kaku. 💆",
    "feminine": "Buat kamu yang pengen tetap fresh dan percaya diri seharian, Feminine V Spray dari EveryBe bisa jadi pilihan praktis — menjaga kesegaran area kewanitaan dengan bahan yang lembut. 🌸",
    "skincare": "Perawatan yang tepat dimulai dari memahami kebutuhan kulitmu sendiri — tidak harus mahal, yang penting sesuai kondisi kulit. ✨",
}

def get_pending():
    pend = []
    for p in range(1, 80):
        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":
                pend.append(d)
    return pend

def next_free_slot(pend, start_date):
    """Cari (tanggal, jam WIB) slot kosong pertama mulai start_date."""
    day = start_date
    for _ in range(14):
        taken = {(d.get("scheduleAt") or "")[:13] for d in pend}
        for h in SLOTS:
            key = f"{day.strftime('%Y-%m-%d')}T{h:02d}"
            utc_h = (day.replace(hour=h, minute=0, tzinfo=WIB).astimezone(timezone.utc).strftime("%Y-%m-%dT%H"))
            if utc_h not in taken:
                return day, h
        day += timedelta(days=1)
    return None, None

def caption(judul, url, kat):
    cta = CTA.get(kat, "")
    return (
        f"Edukasi hari ini: {judul}. 🌿\n\n"
        f"{cta}\n\n"
        f"Masih banyak yang belum tahu pentingnya menjaga kesehatan tubuh dan kewanitaan dengan benar. Kebiasaan kecil yang dilakukan rutin bisa berdampak besar untuk jangka panjang.\n\n"
        f"Simak artikel lengkapnya di sini 👇\n{url}\n\n"
        f"Menurut kamu, kebiasaan sehat apa yang paling susah dijaga? Share pengalamanmu di kolom komentar! 👇\n\n"
        f"#EveryBe #EdukasiKesehatan #KesehatanWanita #SelfCare"
    )

def main():
    days = int(sys.argv[1]) if len(sys.argv) > 1 else 10
    st = json.load(open(STATE)) if os.path.exists(STATE) else {"used": [], "posts": []}
    used = set(st["used"])
    start = datetime.now(WIB).replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)
    pend = get_pending()
    print(f"📘 EveryBe FACEBOOK — {days} hari mulai {start.strftime('%d/%m/%Y')} (7 slot WIB, slot kosong pertama)")

    ok = fail = 0
    for judul, url, kat in ARTIKEL:
        key = hashlib.md5(judul.encode()).hexdigest()[:16]
        if key in used:
            print(f"  ⏭️  sudah: {judul[:45]}")
            continue
        day, hour = next_free_slot(pend, start)
        if day is None:
            print("  ⚠️  tidak ada slot kosong dalam 14 hari")
            break
        at = day.replace(hour=hour, minute=0, tzinfo=WIB).astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        payload = {
            "accountId": EB_FB,
            "title": f"EveryBe — {judul[:45]}",
            "description": caption(judul, url, kat),
            "topic": "Edukasi Kesehatan",
            "type": "text",
            "medias": [],
            "scheduleAt": at,
            "replies": [
                {"text": "Kesehatan itu investasi paling murah dan paling lama dirasakan. Mulai dari hal kecil hari ini! 💪", "username": ""},
                {"text": "Kalau punya pertanyaan seputar produk atau perawatan, jangan ragu tanya di kolom komentar ya. 🙌", "username": ""},
            ],
        }
        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)
            sid = res.get("_id") or res.get("id") or "?"
            ok += 1
            print(f"  ✅ {day.strftime('%d/%m')} {hour:02d}:00 WIB | {judul[:50]}")
            st["used"].append(key)
            st["posts"].append({"date": day.strftime("%Y-%m-%d"), "judul": judul, "url": url})
            json.dump(st, open(STATE, "w"), indent=1, ensure_ascii=False)
            pend.append({"scheduleAt": at})
        except Exception as e:
            fail += 1
            print(f"  ❌ {judul[:40]}: {e}")
    print(f"\n📊 Total: {ok} OK, {fail} gagal")

if __name__ == "__main__":
    main()
