"""
Threads — Nested 3 Level Replies v2
Mulai jam 21:00 WIB. 5 thread × 3 level nested reply.
Topik fresh — beda dari batch pertama.
"""

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

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

A = {
    'uky':      '6a334e89c5ff4ce3a3225a48',
    'ss':       '6a335b9ec5ff4ce3a3225c2a',
    'leit':     '6a5f4af462caae1e04e8b9a6',
    'tslaw':    '6a35f8b7c5ff4ce3a322b2ed',
    'tsc':      '6a4bbc5920e4f4f195e52960',
    'das':      '6a39e461c5ff4ce3a3233e09',
    'everybe':  '6a44ed1920e4f4f195d8ecf7',
}

# 5 THREAD FRESH — Nested 3 level, mulai 21:00 WIB
THREADS = []

# ── 1: @uky — "Gagal itu underrated" ──
THREADS.append({
    'poster': 'uky',
    'post': (
        "Hal paling underrated dalam "
        "perjalanan bisnis: KEGAGALAN. "
        "Banyak yang pamer sukses doang. "
        "Padahal dari 10 percobaan, "
        "8 gagal & 2 berhasil. "
        "Yang gagal justru ngajarin "
        "lebih banyak. Jangan takut "
        "salah. Takutlah kalo gak "
        "belajar dari kesalahan."
    ),
    'l1': ('ss', (
        "Data kami menunjukkan: startup "
        "yang pivot (ubah strategi) "
        "setelah gagal punya survival "
        "rate 3x lebih tinggi. "
        "Kegagalan = data berharga "
        "tentang apa yang gak works."
    )),
    'l2': ('tslaw', (
        "Yang dalam legal: kegagalan "
        "bikin kontrak & dokumen "
        "jadi lebih baik. Biasanya "
        "abis kena masalah baru "
        "orang sadar pentingnya "
        "perjanjian tertulis. "
        "Belajar dari sakit."
    )),
    'l3': ('leit', (
        "Growth mindset: I failed my "
        "way to success. Di kelas "
        "kami, murid yang berani "
        "salah & belajar dari "
        "kesalahan justru "
        "perkembangannya paling cepat."
    )),
})

# ── 2: @ss — "Offline / IRL masih penting" ──
THREADS.append({
    'poster': 'ss',
    'post': (
        "Yang underrated di era "
        "digital: INTERAKSI OFFLINE. "
        "Banyak bisnis sibuk ngejar "
        "algoritma & engagement rate, "
        "tapi lupa kalo pelanggan "
        "itu manusia yang butuh "
        "salaman & ngobrol langsung. "
        "Networking event, gathering "
        "komunitas — itu yg bikin "
        "trust & loyalitas."
    ),
    'l1': ('uky', (
        "Betul. Klien terbesar saya "
        "datangnya dari kopdar, "
        "bukan dari iklan. "
        "Orang beli dari orang, "
        "bukan dari banner. "
        "Digital itu alat, "
        "bukan tujuan."
    )),
    'l2': ('das', (
        "Di bengkel, pelanggan "
        "paling loyal itu yang "
        "sering ngopi & ngobrol "
        "di bengkel. Bukan yang "
        "cari bengkel lewat "
        "Google doang. "
        "Hubungan personal > "
        "harga miring."
    )),
    'l3': ('tslaw', (
        "Sama di legal. Klien "
        "yang percaya sama "
        "kantor hukum biasanya "
        "karena referral & "
        "ketemuan langsung, "
        "bukan dari website."
    )),
})

# ── 3: @tsc — "Cuci muka 2 kali sehari" ──
THREADS.append({
    'poster': 'tsc',
    'post': (
        "Skincare paling underrated: "
        "CUCI MUKA 2 KALI SEHARI. "
        "Kedengarannya sepele, "
        "tapi banyak yang gak "
        "melakukannya dengan benar. "
        "Pakai air hangat (bukan "
        "panas), pilih cleanser "
        "sesuai jenis kulit, "
        "keringkan dengan tepuk-"
        "tepok (bukan gosok). "
        "Sederhana tapi dampak "
        "luar biasa."
    ),
    'l1': ('ss', (
        "Bisa dianalogikan dengan "
        "digital hygiene: hapus "
        "cache, update software, "
        "bersihin inbox. "
        "Perawatan rutin simpel "
        "mencegah masalah besar. "
        "Basic > fancy."
    )),
    'l2': ('uky', (
        "Saya dulu cuci muka "
        "asal-asalan. Pas "
        "diajarin bener — "
        "2 menit pake ujung jari, "
        "bukan digosok — "
        "kulit jauh lebih "
        "sehat. Mind blowing."
    )),
    'l3': ('everybe', (
        "Sama kayak perawatan "
        "organ intim. Cuci "
        "bener, keringin, "
        "pake produk tepat. "
        "Gak perlu ribet, "
        "tapi konsisten. "
        "Dasar yang baik = "
        "hasil maksimal."
    )),
})

# ── 4: @leit — "Baca buku fisik" ──
THREADS.append({
    'poster': 'leit',
    'post': (
        "Kebiasaan paling underrated "
        "di era digital: BACA BUKU "
        "FISIK. Bukan audio book, "
        "bukan e-book. Tapi buku "
        "beneran. Penelitian "
        "membuktikan: baca buku "
        "fisik meningkatkan "
        "retensi informasi 30% "
        "lebih baik. Dan yang "
        "penting: no notifikasi "
        "ganggu konsentrasi."
    ),
    'l1': ('ss', (
        "Data tambahan: screen time "
        "rata-rata orang Indonesia "
        "5,5 jam sehari. Baca buku "
        "fisik 30 menit aja udah "
        "ngurangin stress & "
        "ningkatin fokus. "
        "Digital detox simpel."
    )),
    'l2': ('uky', (
        "Saya rutin baca buku "
        "fisik 20 menit sebelum "
        "tidur. Ganti scrolling "
        "HP. Tidur lebih "
        "nyenyak & pagi "
        "lebih fresh. "
        "Rekomendasi."
    )),
    'l3': ('tslaw', (
        "Buku fisik juga penting "
        "buat referensi hukum. "
        "Baca UU di layar vs "
        "buku — tingkat "
        "pemahamannya beda. "
        "Apalagi kalo "
        "disorot & dicatet."
    )),
})

# ── 5: @everybe — "Ganti handuk & celana rutin" ──
THREADS.append({
    'poster': 'everybe',
    'post': (
        "Hal paling sepele & "
        "underrated buat kesehatan: "
        "GANTI HANDUK & CELANA "
        "DALAM RUTIN. Handuk lembap "
        "itu sarang bakteri. "
        "Pakaian dalam yang "
        "dipakai >12 jam = "
        "risiko infeksi. "
        "Ganti handuk 2-3x "
        "seminggu. Celana "
        "dalam 2x sehari. "
        "Sepele? Iya. "
        "Efektif? Banget."
    ),
    'l1': ('tsc', (
        "Bener. Sebagai dokter, "
        "saya sering nemu pasien "
        "dengan infeksi kulit & "
        "jamur yang sumbernya "
        "handuk gak pernah "
        "dicuci. Handuk lembap "
        "= petridish bakteri. "
        "Ganti rutin!"
    )),
    'l2': ('das', (
        "Ibarat filter udara "
        "di mobil. Kalo jarang "
        "diganti — AC bau, "
        "debu masuk, "
        "kesehatan terganggu. "
        "Rutin ganti part "
        "kecil mencegah "
        "masalah besar."
    )),
    'l3': ('ss', (
        "Ini 'digital hygiene' "
        "juga: ganti password "
        "rutin, bersihin cookies, "
        "update apps. "
        "Perawatan kecil & "
        "konsisten = "
        "keamanan & "
        "kesehatan terjaga."
    )),
})


def schedule_nested(poster, post_text, l1, l2, l3, schedule_at):
    payload = {
        'accountId': poster,
        'title': '',
        'description': post_text.strip(),
        'scheduleAt': schedule_at,
        'type': 'text',
        'medias': [],
        'topic': '',
        'replies': [
            {
                'accountId': l1[0],
                'description': l1[1].strip(),
                'replies': [
                    {
                        'accountId': l2[0],
                        'description': l2[1].strip(),
                        'replies': [
                            {
                                'accountId': l3[0],
                                'description': l3[1].strip(),
                            }
                        ]
                    }
                ]
            }
        ]
    }
    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.get('scheduleId', 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 — Nested 3 v2 🗣️")
    print(f"Mulai jam 21:00 WIB")
    print("=" * 60)
    
    now = datetime.now(timezone.utc)
    
    # 21:00 WIB = 14:00 UTC
    start = now.replace(hour=14, minute=0, second=0, microsecond=0)
    if start <= now:
        start = start + timedelta(days=1)
    
    print(f"\nStart: {start.strftime('%Y-%m-%d %H:%M UTC')} = {(start + timedelta(hours=7)).strftime('%H:%M WIB')}")
    
    success = 0
    failed = 0
    
    for i, t in enumerate(THREADS):
        post_time = start + timedelta(hours=6 * i)
        post_str = post_time.strftime('%Y-%m-%dT%H:%M:%S.000Z')
        wib = (post_time + timedelta(hours=7)).strftime('%H:%M WIB')
        
        poster_id = A[t['poster']]
        l1_id = A[t['l1'][0]]
        l2_id = A[t['l2'][0]]
        l3_id = A[t['l3'][0]]
        
        ok, res = schedule_nested(
            poster_id, t['post'],
            (l1_id, t['l1'][1]),
            (l2_id, t['l2'][1]),
            (l3_id, t['l3'][1]),
            post_str
        )
        
        status = '✅' if ok else '❌'
        print(f"  {status} #{i+1} @{t['poster']} → {wib}")
        if ok:
            print(f"       ↪ @{t['l1'][0]} → @{t['l2'][0]} → @{t['l3'][0]} | ID: {res}")
            success += 1
        else:
            print(f"       {res}")
            failed += 1
    
    print(f"\n{'=' * 60}")
    print(f"✅ {success} | ❌ {failed}")
    print(f"{'=' * 60}")
    print(f"\n📌 5 thread × 3 level nested = 20 post")
    print(f"   Mulai: {start.strftime('%d %b %H:%M UTC')} = 21:00 WIB")
    for i in range(len(THREADS)):
        pt = start + timedelta(hours=6*i)
        wib = (pt + timedelta(hours=7)).strftime('%H:%M WIB')
        t = THREADS[i]
        print(f"   #{i+1} @{t['poster']} → {wib}")
    

if __name__ == '__main__':
    main()
