#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Konten artikel 'cara-memilih-jasa-seo-surabaya' untuk platform yang BELUM pernah pakai:
SS-FB, SS-LinkedIn, UKY-Threads. Angle beda per platform. Nested, link, ajak diskusi.
Slot: isi slot kosong (05/08/11/14/17/20/23 WIB) mulai besok.
"""
import sys, json, 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))
URL = "https://studiosoft.id/cara-memilih-jasa-seo-surabaya/"
SLOTS = [5, 8, 11, 14, 17, 20, 23]

SS_FB = "6a334952c5ff4ce3a3225941"
SS_LI = "6a334c49c5ff4ce3a32259c9"
UKY_T = "6a334e89c5ff4ce3a3225a48"

def get_pending(accid):
    pend = []
    for p in range(1, 60):
        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") == accid and (d.get("status") or "").lower() == "pending":
                pend.append(d)
    return pend

def next_free_slot(pend, start):
    day = start
    for _ in range(14):
        taken = {(d.get("scheduleAt") or "")[:13] for d in pend}
        for h in SLOTS:
            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

# ── Caption per platform (angle beda) ──
CAP_FB = (
    "Bingung milih jasa SEO di Surabaya? Kamu nggak sendirian — banyak pemilik bisnis yang akhirnya salah pilih karena tergiur harga murah atau janji 'peringkat 1 dalam seminggu'. 🎯\n\n"
    "Jasa SEO yang benar itu yang transparan: mau diajak lihat portofolio & studi kasus, pakai metode yang jelas, data-driven, dan rutin kasih laporan progress. Bukan sekadar klaim, tapi bukti.\n\n"
    "Di artikel ini kami rangkum panduan lengkapnya — 5 hal yang WAJIB dicek sebelum menitipkan website kamu ke jasa SEO. Simak di sini 👇\n" + URL + "\n\n"
    "Menurut kamu, apa tanda jasa SEO yang patut dihindari? Share pengalamanmu di kolom komentar! 👇\n\n"
    "#StudioSoft #JasaSEOSurabaya #SEO #DigitalMarketing #TipsBisnis"
)

CAP_LI = (
    "Memilih vendor SEO adalah keputusan bisnis yang sering dianggap remeh, padahal dampaknya besar. Banyak perusahaan baru sadar setelah 3-6 bulan website-nya tidak kunjung naik — dan kontrak sudah terlanjur jalan. ⚖️\n\n"
    "Dari pengalaman kami menangani klien di Surabaya, ada pola yang sama: vendor yang bagus selalu terbuka soal metode, alat, dan metrik keberhasilan. Mereka tidak takut diaudit portofolionya dan melaporkan progress secara berkala — bukan cuma angka di awal.\n\n"
    "Panduan lengkap memilih jasa SEO (termasuk red flags yang harus dihindari) ada di artikel ini 👇\n" + URL + "\n\n"
    "Bagaimana pengalaman Anda dalam memilih vendor digital? Silakan berbagi di kolom komentar. 👇\n\n"
    "#StudioSoft #SEO #DigitalMarketing #BisnisSurabaya #VendorManagement"
)

CAP_UKY = (
    "Sering ditanya orang: 'bang, gimana sih milih jasa SEO yang beneran?' — dan jawaban saya selalu sama: lihat buktinya, bukan janjinya. 🔍\n\n"
    "Jasa SEO yang bagus itu berani tunjuk portofolio, pakai data, dan laporannya jelas. Kalau cuma janji 'seminggu masuk page one' tanpa penjelasan metode — mending kabur duluan. 😄\n\n"
    "Saya tulis panduan lengkapnya di sini, biar kamu nggak salah pilih kayak yang udah-udah 👇\n" + URL + "\n\n"
    "Pernah ketipu jasa SEO? Atau punya tips sendiri? Cerita di komentar yuk! 👇\n\n"
    "#SEO #JasaSEO #DigitalMarketing #BisnisSurabaya #StudioSoft"
)

def put(accid, desc, at, title, replies, topic="SEO"):
    payload = {
        "accountId": accid, "title": title, "description": desc,
        "topic": topic, "type": "text", "medias": [],
        "scheduleAt": at, "replies": replies,
    }
    req = urllib.request.Request(f"{BASE}/public/schedule",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=30) as r:
        return json.load(r)

def main():
    start = datetime.now(WIB).replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)
    jobs = [
        (SS_FB, "SS-FB", CAP_FB, ["Jasa SEO yang bagus itu transparan — minta selalu laporan progress berkala! 📊", "Website naik bukan kebetulan, tapi hasil strategi yang terukur. 💪"]),
        (SS_LI, "SS-LinkedIn", CAP_LI, ["Transparansi metode & laporan berkala adalah pembeda utama vendor yang kredibel. 📈", "Pilih partner digital seperti memilih mitra bisnis — cek rekam jejaknya dulu. 🤝"]),
        (UKY_T, "UKY-Threads", CAP_UKY, ["Intinya: bukti > janji. Selalu minta portofolio sebelum bayar. 👍", "Kalau masih ragu, konsultasi dulu aja — gratis kok. 😉"]),
    ]
    print(f"📌 Artikel cara-memilih-jasa-seo-surabaya → platform baru (mulai {start.strftime('%d/%m')})")
    for accid, nm, cap, replies in jobs:
        pend = get_pending(accid)
        day, hour = next_free_slot(pend, start)
        if day is None:
            print(f"  ❌ {nm}: tidak ada slot kosong 14 hari")
            continue
        at = day.replace(hour=hour, minute=0, tzinfo=WIB).astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        try:
            res = put(accid, cap, at, f"StudioSoft — {nm} Cara Memilih Jasa SEO", [{"text": r, "username": ""} for r in replies])
            sid = res.get("_id") or res.get("id") or "?"
            print(f"  ✅ {nm} | {day.strftime('%d/%m')} {hour:02d}:00 WIB | {sid}")
        except Exception as e:
            print(f"  ❌ {nm}: {e}")

if __name__ == "__main__":
    main()
