#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Postingan Threads ENGAGEMENT — ajak diskusi — SEMUA AKUN (12 Agustus 2026)
Aturan: max 500 karakter, humanis pakai "saya", minimal 1 paragraf, ajak komentar,
konten sesuai brand masing-masing, jangan mulai dengan ucapan berlebihan.
"""
import sys, json, os, re, urllib.request, urllib.error
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE, ACC

WIB = timezone(timedelta(hours=7))
LOG = "/home/mantapman/.hermes/profiles/atun/workspace/threads_log.txt"

# (nama, account_id, slot WIB, caption)
POSTS = [
    (
        "UKY_THREADS", ACC.UKY_THREADS, "2026-08-12 23:00",
        "Penasaran sama kebiasaan kalian: sebelum beli produk atau pilih jasa, "
        "tim riset dulu di Google atau tim langsung percaya review sosmed? Dua-duanya pernah bikin saya ketipu \U0001F605 "
        "Tapi yang paling penting sebenarnya bukan caranya, melainkan konsisten cek sumbernya. Kalian tim mana? "
        "Share pengalaman di kolom komentar ya \U0001F447",
    ),
    (
        "STUDIOSOFT_THREADS", ACC.STUDIOSOFT_THREADS, "2026-08-12 23:00",
        "Diskusi dong: menurut kalian, kenapa banyak UMKM yang websitenya sudah bagus tapi tetap sepi pengunjung? "
        "Padahal produknya oke dan harganya bersaing. Saya sering nemu jawabannya bukan di desain, "
        "tapi di SEO dan strategi kontennya. Setuju atau punya pendapat lain? Cerita di kolom komentar ya \U0001F447",
    ),
    (
        "LEIT_THREADS", ACC.LEIT_THREADS, "2026-08-12 23:00",
        "Menurut kalian, kenapa banyak orang belajar bahasa Inggris bertahun-tahun tapi tetap kesulitan ngomong? "
        "Padahal grammar sudah hafal dan kosakata sudah banyak. Saya percaya jawabannya: kurang praktik speaking "
        "dan rasa percaya diri. Kalian setuju? Atau punya pengalaman lain? Cerita di kolom komentar ya \U0001F447",
    ),
    (
        "TSLAW_THREADS", ACC.TSLAW_THREADS, "2026-08-12 23:00",
        "Buat para pelaku usaha: kalau kerja sama baru dimulai hanya dengan jabat tangan dan janji lisan, "
        "menurut kalian aman atau berisiko? Banyak yang bilang sudah saling percaya. Tapi saat masalah datang, "
        "bukti tertulis yang berbicara. Pernah ada pengalaman soal ini? Cerita di kolom komentar ya \U0001F447",
    ),
    (
        "DAS_THREADS", ACC.DAS_THREADS, "2026-08-13 05:00",
        "Penasaran nih sama pemilik mobil: ada yang rajin servis berkala, ada juga yang nunggu bunyi aneh dulu "
        "baru bawa ke bengkel. Menurut kalian, servis rutin itu buang-buang biaya atau justru investasi? "
        "Saya sudah lihat banyak mesin rusak parah gara-gara telat dirawat. Tim mana kalian? "
        "Cerita di kolom komentar ya \U0001F447",
    ),
    (
        "TSC_THREADS", ACC.TSC_THREADS, "2026-08-12 23:00",
        "Buat yang peduli kesehatan kulit: lebih percaya konsultasi ke dokter kulit langsung, "
        "atau coba-coba produk skincare dari review online dulu? Menurut saya, kulit itu unik — "
        "yang cocok di orang belum tentu cocok di kita. Diagnosis dokter itu langkah paling aman. "
        "Kalian tim mana? Share pengalaman di kolom komentar ya \U0001F447",
    ),
]


def validate_text(text, label):
    text = text.strip()
    if len(text) > 500:
        raise ValueError(f"{label}: {len(text)} karakter > 500 — JANGAN kirim!")
    if len(text) < 80:
        raise ValueError(f"{label}: terlalu pendek ({len(text)}).")
    # cek link kalau ada
    for url in re.findall(r'https?://[^\s]+', text):
        try:
            req = urllib.request.Request(url.rstrip('.,;!?'), headers={"User-Agent": "Mozilla/5.0"}, method="GET")
            with urllib.request.urlopen(req, timeout=15) as r:
                if r.status != 200:
                    raise ValueError(f"{label}: link mati {url}")
        except Exception as e:
            raise ValueError(f"{label}: link gagal {url} — {e}")
    return text


def log(msg):
    with open(LOG, "a") as f:
        f.write(f"[{datetime.now(WIB).strftime('%Y-%m-%d %H:%M:%S')} WIB] {msg}\n")
    print(msg)


def main():
    print("=" * 60)
    print("🗣️ THREADS ENGAGEMENT — AJAK DISKUSI (SEMUA AKUN)")
    print(f"   {datetime.now(WIB).strftime('%Y-%m-%d %H:%M')} WIB")
    print("=" * 60)

    ok = 0
    for name, acc, slot_wib, caption in POSTS:
        try:
            caption = validate_text(caption, name)
        except ValueError as e:
            log(f"❌ {name}: {e}")
            continue

        wib_dt = datetime.strptime(slot_wib, "%Y-%m-%d %H:%M").replace(tzinfo=WIB)
        iso_utc = (wib_dt - timedelta(hours=7)).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        payload = {
            "accountId": acc,
            "title": "",
            "description": caption,
            "topic": "",
            "type": "text",
            "medias": [],
            "scheduleAt": iso_utc,
            "replies": [],
        }
        body = json.dumps(payload).encode()
        req = urllib.request.Request(f"{BASE}/public/schedule", data=body, headers={**HEADERS, "Content-Type": "application/json"}, method="POST")
        try:
            with urllib.request.urlopen(req, timeout=30) as r:
                result = json.loads(r.read())
                sid = result.get("scheduleId", result.get("id", "?"))
                log(f"✅ {name} → {sid} | {slot_wib} WIB | {len(caption)} karakter")
                ok += 1
        except urllib.error.HTTPError as e:
            err = e.read().decode()[:200]
            log(f"❌ {name}: HTTP {e.code} — {err}")
        except Exception as e:
            log(f"❌ {name}: {e}")

    print("=" * 60)
    print(f"✅ Selesai — {ok}/{len(POSTS)} terjadwal")
    print("=" * 60)


if __name__ == "__main__":
    main()
