#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Threads LEIT — Posting rutin caption (24 Agu 2026, arahan Bos):
- Bahas/reshare konten IG LEIT Surabaya (@leitsurabaya)
- Grammar English + ajak diskusi
- Jokes English + ajak ngobrol penghuni Threads
ATURAN: LEIT HANYA posting caption — TIDAK reply/diskusi/comment otomatis (FIXED 24 Agu).
Caption memancing diskusi (ajakan di caption), tapi akun tidak membalas otomatis.
≤500 karakter, humanis pakai "saya".
"""
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['leit_threads']  # @leitsurabaya
LOG_FILE = "/home/mantapman/.hermes/profiles/atun/workspace/leit_threads_log.txt"

# ── 3 SERI: (nama, [post1, post2, post3]) ──
SERIES = {
    "ig_reshare": [
        (
            "Baru lihat postingan terbaru di IG @leitsurabaya — soal metode Speaking "
            "Based yang bikin murid LEIT pede ngomong Inggris sejak pertemuan pertama. 🤩\n"
            "\n"
            "Saya setuju banget: bahasa itu skill, bukan teori. Makin sering dipakai, "
            "makin lancar.\n"
            "\n"
            "Menurut kamu, kenapa banyak orang hafal grammar tapi tetap gak pede "
            "ngomong? Yuk diskusi di komentar! 👇\n"
            "\n"
            "#LEITSurabaya #BelajarInggris #SpeakingEnglish"
        ),
        (
            "Lanjut dari postingan IG LEIT tadi: ada juga program khusus karyawan & "
            "profesional (ESP). Kerja sambil belajar, jadwalnya fleksibel. 💼\n"
            "\n"
            "Yang menarik: materinya langsung relevan sama dunia kerja — presentasi, "
            "email, meeting.\n"
            "\n"
            "Kamu kerja di bidang yang butuh bahasa Inggris? Ceritakan di komentar! 💬\n"
            "\n"
            "#LEITSurabaya #EnglishForProfessionals #KursusInggris"
        ),
        (
            "Satu hal yang bikin LEIT beda: leadership-based learning. Belajar Inggris "
            "sambil dibentuk jadi pemimpin — pede ngomong, pede ambil keputusan. 🚀\n"
            "\n"
            "Jadi bukan cuma 'bisa bahasa', tapi 'berani pakai bahasa'.\n"
            "\n"
            "Menurut kamu, bahasa Inggris itu modal utama buat karir atau cuma nilai "
            "tambah? Share pendapatmu! 🙏\n"
            "\n"
            "#LEITSurabaya #Leadership #BelajarBahasaInggris"
        ),
    ],
    "grammar": [
        (
            "Quiz grammar singkat buat kamu! 🧠\n"
            "\n"
            "Mana yang benar?\n"
            "a) She don't like coffee\n"
            "b) She doesn't like coffee\n"
            "c) She not like coffee\n"
            "\n"
            "Jawab di komentar ya! Besok saya bahas kenapa jawabannya begitu. 😄\n"
            "\n"
            "#GrammarEnglish #BelajarBahasaInggris #QuizGrammar"
        ),
        (
            "Jawaban quiz kemarin: b) She doesn't like coffee ✅\n"
            "\n"
            "Kenapa? Subject 'she' (orang ketiga tunggal) butuh 'doesn't', bukan "
            "'don't'. Aturan kecil yang sering bikin salah.\n"
            "\n"
            "Satu lagi: \"He go to school\" atau \"He goes to school\"? Tulis "
            "jawabanmu di komentar! 💬\n"
            "\n"
            "#GrammarEnglish #TipsGrammar #BelajarInggris"
        ),
        (
            "Jawabannya: He goes to school ✅ (tambah -es untuk he/she/it).\n"
            "\n"
            "Gampangnya inget: I/you/we/they → go, he/she/it → goes. Verb ditambah "
            "-s/-es.\n"
            "\n"
            "Masih bingung bagian grammar yang mana? Tulis di komentar, saya coba "
            "jelasin! 🙏\n"
            "\n"
            "#GrammarEnglish #BelajarInggris #EnglishTips"
        ),
    ],
    "jokes": [
        (
            "Jokes English buat penghuni Threads! 😂\n"
            "\n"
            "Why did the English teacher go to the beach?\n"
            "Because she wanted to test the water! 🌊\n"
            "\n"
            "Hahaha... paham gak? Kalau paham, artinya kamu paham kata 'test' punya "
            "2 arti. 😉\n"
            "\n"
            "Kamu punya jokes English favorit? Share di komentar, nanti saya pilah "
            "yang paling lucu! 👇\n"
            "\n"
            "#JokesEnglish #BelajarSambilKetawa #EnglishFun"
        ),
        (
            "Jokes English lagi — kali ini soal grammar: 🤣\n"
            "\n"
            "\"I'm reading a book about anti-gravity. It's impossible to put down!\"\n"
            "\n"
            "Gak bisa 'put down' = gak bisa berhenti baca, padahal buku anti-gravitasi "
            "beneran gak bisa ditaruh. 😆\n"
            "\n"
            "Ada yang mau coba bikin jokes bahasa Inggris sendiri? Tulis di komentar! 💬\n"
            "\n"
            "#JokesEnglish #Wordplay #BelajarInggris"
        ),
        (
            "Satu lagi, biar makin ngakak: 😂\n"
            "\n"
            "What do you call a bear with no teeth?\n"
            "A gummy bear!\n"
            "\n"
            "Gummy bear = beruang tanpa gigi (gum = gusi). Pinter banget yang bikin.\n"
            "\n"
            "Belajar bahasa paling enak sambil ketawa — otak lebih gampang inget. "
            "Mau seru-seruan belajar Inggris bareng LEIT? Ceritakan jokes favoritmu "
            "di komentar! 🙏\n"
            "\n"
            "#JokesEnglish #BelajarSambilKetawa #LEITSurabaya"
        ),
    ],
}

# ── JADWAL HARI INI: 3 slot (post utama 00, reply 02 & 04 menit) ──
SCHEDULE = [
    ("ig_reshare", "2026-08-24T11:00:00+07:00"),
    ("grammar",    "2026-08-24T14:00:00+07:00"),
    ("jokes",      "2026-08-24T17:00:00+07:00"),
]


def enforce_max_chars(text, maxlen=500):
    try:
        return cek_teks_threads(text, label="Caption Threads LEIT", 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": "Pendidikan",
        "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 LEIT — Posting rutin (IG Reshare / Grammar / Jokes)")
    print("=" * 58)
    ok = fail = 0
    for seri_name, slot0 in SCHEDULE:
        posts = SERIES[seri_name]
        print(f"\n📦 SERI: {seri_name} — mulai {slot0}")
        base = datetime.fromisoformat(slot0)
        ids = []
        prev_sid = None
        for i, post in enumerate(posts):
            slot = (base + timedelta(minutes=2 * i)).isoformat()
            print(f"  📌 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:
                fail += 1
                print("  ⚠️ Gagal. Stop seri ini.")
                break
            ids.append(sid)
            prev_sid = sid
            ok += 1
        if not dry and len(ids) == 3:
            entry = f"LEIT | {seri_name} | 2026-08-24 | IDs: {', '.join(ids)}\n"
            with open(LOG_FILE, "a") as f:
                f.write(entry)
    print("\n" + "=" * 58)
    print(f"🏁 Selesai: {ok} OK, {fail} gagal ({'DRY' if dry else 'SCHEDULE'})")


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