#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Threads @ukyhandoko — Seri Quotes Hidup × AI / Digital Marketing / SEO.
ATURAN (23 Agu 2026, dari Bos):
- Quotes hidup orisinal, relatable, gak lebay, nyambung ke AI/DM/SEO.
- WAJIB memancing diskusi & minta komen.
- ≤500 karakter, humanis pakai "saya", jangan mulai dengan makasih/syukur.
Nested 3 post. Slot: 23:00 WIB (16:00 UTC) 23/08/2026.
"""
import json, os, sys, urllib.request, urllib.error
from datetime import datetime, timezone, timedelta

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from repliz_client import HEADERS, BASE, ACCOUNTS
from threads_text_check import cek_teks_threads, ThreadsTextError

ACCOUNT_ID = ACCOUNTS['uky_threads']  # @ukyhandoko
LOG_FILE = "/home/mantapman/.hermes/profiles/atun/workspace/threads_log.txt"

SERIES = [
    (
        "Hidup itu seperti SEO: yang naik peringkat bukan yang paling cepat, tapi "
        "yang paling konsisten. 📈\n"
        "\n"
        "Algoritma berubah, tren berganti — tapi yang bertahan selalu punya satu hal: "
        "konsistensi. Konten rutin, kualitas dijaga, dan sabar menunggu hasil.\n"
        "\n"
        "Sama seperti hidup. Saya pun belajar: tidak perlu sempurna tiap hari, cukup "
        "jangan berhenti.\n"
        "\n"
        "Apa satu hal yang sedang kamu pertahankan konsisten? Tulis di komentar 👇\n"
        "\n"
        "#QuotesHidup #SEO #Konsistensi"
    ),
    (
        "Bisnis itu seperti pertemanan: orang tidak ingat apa yang kamu jual, tapi "
        "ingat bagaimana kamu membuat mereka merasa. ❤️\n"
        "\n"
        "Itulah inti digital marketing. Bukan soal pamer produk, tapi membangun "
        "kepercayaan. Konten yang jujur, pelayanan tulus, dan cerita yang dekat "
        "dengan orang.\n"
        "\n"
        "Kalau orang sudah percaya, jualan bukan lagi soal meyakinkan — tapi melayani.\n"
        "\n"
        "Pernah membeli sesuatu karena cerita brand-nya? Ceritakan di komentar! 💬\n"
        "\n"
        "#QuotesHidup #DigitalMarketing #Branding"
    ),
    (
        "Zaman berganti — yang bertahan bukan yang terkuat, tapi yang paling cepat "
        "beradaptasi. 🤖\n"
        "\n"
        "AI hadir bukan untuk menggantikan kita, tapi memberi peluang besar bagi yang "
        "mau belajar. Dulu pemenangnya yang kerja keras; sekarang yang menang adalah "
        "yang kerja cerdas dan memakai alat yang tepat.\n"
        "\n"
        "Saya percaya: jangan takut teknologi. Coba, pelajari, dan jadikan AI teman "
        "kerja kamu.\n"
        "\n"
        "Kamu sudah pakai AI untuk apa saja? Share di komentar! 🚀\n"
        "\n"
        "#QuotesHidup #AI #GenerativeAI"
    ),
]

WIB = timezone(timedelta(hours=7))


def enforce_max_chars(text, maxlen=500):
    try:
        return cek_teks_threads(text, label="Caption Threads Uky", maxlen=maxlen)
    except ThreadsTextError as e:
        print(f"  SKIP: {e}")
        return None


def schedule(text, scheduleAt_iso, parentId=None):
    text = enforce_max_chars(text)
    if text is None:
        return None
    payload = {
        "title": "",
        "description": text,
        "topic": "Inspirasi",
        "type": "text",
        "medias": [],
        "meta": {"title": "", "description": "", "url": ""},
        "additionalInfo": {
            "isAiGenerated": False, "isDraft": False,
            "collaborators": [], "mentions": [],
            "music": {"id": "", "artist": "", "name": "", "thumbnail": ""},
            "products": [], "tags": []
        },
        "replies": [],
        "accountId": ACCOUNT_ID,
        "scheduleAt": scheduleAt_iso,
    }
    if parentId:
        payload["replies"] = [parentId]
    body = json.dumps(payload).encode()
    req = urllib.request.Request(f"{BASE}/public/schedule", data=body, headers=HEADERS, method="POST")
    try:
        with urllib.request.urlopen(req) as r:
            result = json.loads(r.read())
            sid = result.get("scheduleId", "?")
            print(f"  ✅ OK → scheduleId: {sid}")
            return sid
    except urllib.error.HTTPError as e:
        err = e.read().decode()
        print(f"  ❌ ERROR {e.code}: {err}")
        return None


def main(dry=False):
    print("💬 Threads @ukyhandoko — Series: Quotes Hidup × AI/DM/SEO")
    print("=" * 55)
    date_str = "2026-08-23"
    slots = [
        f"{date_str}T23:00:00+07:00",
        f"{date_str}T23:03:00+07:00",
        f"{date_str}T23:06:00+07:00",
    ]
    ids = []
    prev_sid = None
    for i, (post, slot) in enumerate(zip(SERIES, slots)):
        print(f"\n📌 POST {i+1} ({slot}) — {len(post)} karakter")
        if dry:
            ids.append(f"DRY-{i+1}")
            prev_sid = f"DRY-{i}"
            continue
        sid = schedule(post, slot, parentId=prev_sid)
        if not sid:
            print("  ⚠️ Gagal. Stop.")
            break
        ids.append(sid)
        prev_sid = sid
    if len(ids) == 3:
        print("\n" + "=" * 55)
        print("✅ SEMUA TERJADWAL!" if not dry else "✅ DRY RUN OK")
        for i, sid in enumerate(ids):
            print(f"   {slots[i][-12:]} → Post {i+1} — ID: {sid}")
        if not dry:
            entry = f"Uky | Series Quotes Hidup x AI/DM/SEO | 2026-08-23 | IDs: {', '.join(ids)}\n"
            with open(LOG_FILE, "a") as f:
                f.write(entry)
    else:
        print("\n❌ Ada yang gagal.")


if __name__ == "__main__":
    main(dry="--dry" in sys.argv)
