"""
Threads — Cross Reply Engine v2
Saling reply antar 7 akun Threads via Repliz nested replies.
Tiap thread: 1 akun posting → 3-4 akun lain reply langsung (nested).
"""

import base64, json, urllib.request, sys
from datetime import datetime, timedelta, timezone

AUTH = 'NDY1NDYwOTg2Njpzb09vSDJJUnk2QmthSXJIU0FmMW5HbHkyUmNvaXc5Wg=='
HEADERS = {'Authorization': AUTH, 'Content-Type': 'application/json'}
BASE = 'https://api.repliz.com'

AKUN = {
    'uky':      '6a334e89c5ff4ce3a3225a48',
    'ss':       '6a335b9ec5ff4ce3a3225c2a',  # studiosoft
    # 'leit':     '6a5f4af462caae1e04e8b9a6',  # LEIT DIKELUARKAN 24 Agu 2026: hanya posting caption, TIDAK ikut reply/diskusi/comment
    'tslaw':    '6a35f8b7c5ff4ce3a322b2ed',
    'tsc':      '6a4bbc5920e4f4f195e52960',
    'das':      '6a39e461c5ff4ce3a3233e09',
    'everybe':  '6a44ed1920e4f4f195d8ecf7',
}

# ────────────────────────────────────────────
# 5 THREAD CROSS-REPLY
# Format: [poster, post_text, [(replier, reply_text), ...]]
# ────────────────────────────────────────────

THREADS = [
    # ── THREAD 1: @ukyhandoko → semua komen ──
    ('uky', 
     "Banyak yang nanya 'gimana caranya bisnis kecil bisa bersaing?' Jawaban saya: fokus ke niche, konsisten konten, dan jaga customer service. Gak perlu jadi yang terbesar, cukup jadi yang paling dipercaya di niche lo.",
     [
         ('ss', "Data membuktikan: bisnis kecil yang fokus di niche spesifik punya conversion rate 3x lebih tinggi dari yang general. Karena pesannya lebih tepat sasaran."),
         ('tslaw', "Nambahin: di niche spesifik, proteksi hukum juga lebih mudah. Merek dagang didaftarin, kontrak standar dibuat, izin sesuai bidang. Lebih terarah."),
         ('tsc', "Di klinik kami juga fokus ke skin & genital — bukan general clinic. Pasien datang karena tau kami spesialis di bidang itu. Trust-nya beda."),
         # ('leit', "Bener. Di LEIT, niche kami English + Leadership. Bukan les Inggris biasa. Itu yang bikin orang mau daftar meskipun harga lebih tinggi."),  # LEIT DIKELUARKAN 24 Agu 2026
     ]),
    
    # ── THREAD 2: @studiosoft.id → data & digital ──
    ('ss',
     "Satu hal yang masih jarang dilakukan UMKM: ngukur ROI digital marketing mereka. Pemasangan iklan, bikin konten, sewa influencer — tapi gak pernah dihitung balik modalnya. Padahal toolkit ngukur ROI sekarang gratis (Google Analytics, Meta Business Suite, dll).",
     [
         ('uky', "Saya dulu juga gitu. Iklan FB jalan terus, tapi gak pernah dicek mana yang beneran konversi. Pas beneran pake GA, baru tau 80% budget habis di audiens yang salah."),
         ('tslaw', "ROI juga perlu diukur dari sisi legal. Konten iklan sesuai regulasi? Data pelanggan aman? Satu gugatan bisa hapus semua profit."),
         ('das', "Di bengkel, kami ukur ROI dari jumlah pelanggan balik. Kalo servis bener, 80% pelanggan balik lagi. Sama kaya digital: kalo strategi bener, customer lifetime value naik."),
     ]),
    
    # ── THREAD 3: @dniclinic_krian → skincare & kesehatan ──
    ('tsc',
     "Satu mitos yang masih susah dibenerin: 'skincare mahal pasti lebih bagus.' Padahal yang paling penting itu KANDUNGAN & KECOCOKAN KULIT. Produk 50rb pun kalo cocok & konsisten, hasilnya lebih baik dari produk 500rb yang bikin breakout.",
     [
         ('ss', "Data riset kami di StudioSoft: 68% pembeli skincare pertama kali beli karena harga & kemasan. Tapi 73% pembeli kedua kalinya beli karena hasil & rekomendasi dokter. Trust > harga."),
         ('everybe', "Produk EveryBe pakai ekstrak daun sirih. Bahan tradisional yang murah tapi khasiatnya sudah teruji. Harga bukan satu-satunya indikator kualitas."),
         # ('leit', "Mindset 'mahal = bagus' ini juga berlaku di pendidikan. Banyak pilih kursus mahal padahal metodologi & pengajarnya gak sesuai. Always do your research."),  # LEIT DIKELUARKAN 24 Agu 2026
     ]),
    
    # ── THREAD 4: @leitsurabaya → pendidikan ──
    # THREAD 4 DIKELUARKAN 24 Agu 2026: LEIT hanya posting caption, TIDAK ikut reply/diskusi/comment.
    # ('leit',
    #  "Skill yang paling dicari perusahaan sekarang bukan programming atau desain. Tapi COMMUNICATION & PROBLEM SOLVING. Semua industri butuh orang yang bisa menjembatani antara tim teknis & non-teknis. Bahasa Inggris jadi nilai tambah besar karena membuka akses ke pengetahuan global.",
    #  [
    #      ('uky', "Saat rekrut, saya selalu tes komunikasi dulu. CV bagus tapi gak bisa jelasin idenya dengan jelas — berat di tim. Bahasa Inggris? Big plus."),
    #      ('tslaw', "Komunikasi yang buruk penyebab utama sengketa bisnis. Kontrak ditandatangani tanpa dibaca, janji lisan gak ditepati. Legal drafting itu bentuk komunikasi tertulis."),
    #      ('das', "Di bengkel, montir yang bisa jelasin masalah mobil ke pelanggan dengan bahasa sederhana — itu yang paling dipercaya. Komunikasi itu skill teknis juga."),
    #  ]),
    
    # ── THREAD 5: @everybe → self-care wanita ──
    ('everybe',
     "Banyak wanita ngerasa 'repot' merawat organ intim. Padahal cukup 10 detik: semprot Feminine V Spray setelah mandi. Selesai. Gak perlu dibilas, gak perlu dikeringin. Konsisten tiap hari = masalah besar seperti keputihan & infeksi bisa dicegah. Simple banget.",
     [
         ('tsc', "Sebagai dokter, saya setuju 100%. Banyak pasien datang dengan infeksi yang sebenarnya bisa dicegah dengan kebersihan rutin. 10 detik sehari > 2 minggu minum obat."),
         ('uky', "Ini yang saya maksud: solusi sederhana yang konsisten > treatment kompleks yang kadang-kadang. Berlaku di bisnis, kesehatan, apapun."),
         ('ss', "Bisa dibilang ini 'minimum viable routine'-nya self-care wanita. Produk yang tepat + konsisten = hasil maksimal. Efisien."),
         ('das', "Ibarat mobil: semprot WD-40 ke engsel pintu tiap bulan biar gak seret. Perawatan kecil yang konsisten mencegah kerusakan besar."),
     ]),
]


def schedule_with_replies(account_id, title, description, schedule_at, replies):
    """Schedule a post with nested replies from different accounts"""
    
    # Format replies
    reply_list = []
    for replier_id, reply_desc in replies:
        reply_list.append({
            'accountId': replier_id if isinstance(replier_id, str) and len(replier_id) > 10 else replier_id,
            'description': reply_desc,
        })
    
    payload = {
        'accountId': account_id,
        'title': title,
        'description': description,
        'topic': '',
        'type': 'text',
        'medias': [],
        'scheduleAt': schedule_at,
        'replies': reply_list,
    }
    
    data = json.dumps(payload).encode('utf-8')
    req = urllib.request.Request(
        f'{BASE}/public/schedule',
        data=data,
        headers=HEADERS,
        method='POST'
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            result = json.loads(resp.read())
            return True, result
    except urllib.error.HTTPError as e:
        body = e.read().decode()
        return False, f"HTTP {e.code}: {body[:200]}"
    except Exception as e:
        return False, str(e)


def main():
    print("=" * 60)
    print("Threads — Cross Reply Engine v2 🗣️")
    print(f"Waktu: {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M UTC')}")
    print("=" * 60)

    now = datetime.now(timezone.utc)
    
    # Mulai jam 10:00 WIB = 03:00 UTC besok (biar gak bentrok sama Underrated threads)
    # Underrated threads jalan di 23, 05, 11, 17, 23 WIB
    # Cross reply jalan di selang waktu 08, 14, 20 WIB
    
    # Mulai dari besok jam 01:00 UTC = 08:00 WIB
    tomorrow = now + timedelta(days=1)
    start = tomorrow.replace(hour=1, minute=0, second=0, microsecond=0)
    
    # Kalo sekarang udah lewat, mulai besok +1
    if start <= now:
        start = start + timedelta(days=1)
    
    print(f"\nMulai: {start.strftime('%Y-%m-%d %H:%M UTC')} = {(start + timedelta(hours=7)).strftime('%H:%M WIB')}")
    
    success = 0
    failed = 0
    
    for i, (poster_key, post_text, replies) in enumerate(THREADS):
        post_time = start + timedelta(hours=6 * i)  # setiap 6 jam
        post_str = post_time.strftime('%Y-%m-%dT%H:%M:%S.000Z')
        
        poster_name = poster_key.upper()
        poster_id = AKUN[poster_key]
        
        # Siapkan replies dengan account IDs
        reply_items = []
        for replier_key, reply_text in replies:
            rid = AKUN[replier_key] if replier_key in AKUN else replier_key
            reply_items.append((rid, reply_text))
        
        title = f"Cross Talk #{i+1}"
        desc = post_text.strip()
        if len(desc) > 500:
            desc = desc[:497] + "..."
        
        print(f"\n--- Thread {i+1}: @{poster_key} ({post_str[:10]}) ---")
        
        ok, res = schedule_with_replies(poster_id, title, desc, post_str, reply_items)
        if ok:
            sid = res.get('scheduleId', '?')
            print(f"  ✅ posted | ID: {sid}")
            print(f"     Replies: {len(reply_items)} akun reply")
            success += 1
        else:
            print(f"  ❌ {res}")
            failed += 1
    
    print(f"\n{'=' * 60}")
    print(f"✅ {success} | ❌ {failed}")
    print(f"{'=' * 60}")
    print()
    print(f"📌 {len(THREADS)} thread cross-reply, total {sum(len(r) for _,_,r in THREADS)} replies")
    print(f"   Jadwal: {start.strftime('%d %b %H:%M UTC')} - {(start + timedelta(hours=6*(len(THREADS)-1))).strftime('%d %b %H:%M UTC')}")
    for i, t in enumerate(THREADS):
        tstart = start + timedelta(hours=6*i)
        tstr = tstart.strftime('%d %b %H:%M')
        wib = (tstart + timedelta(hours=7)).strftime('%H:%M WIB')
        print(f"   #{i+1} @{t[0]} → {tstr} UTC / {wib}")


if __name__ == '__main__':
    main()
