"""
Threads — Nested 3 Level v4 (Batch 4)
5 thread fresh, topik "underrated" baru
Slot: 00, 06, 12, 18, 00 WIB
"""

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 DIKELUARKAN 28 Agu 2026 (instruksi Bos): TIDAK ada mention dari akun kita
    # ke Threads LEIT (@leitsurabaya) — jangan dimasukkan lagi ke mesin mention/diskusi.
    'tslaw':    '6a35f8b7c5ff4ce3a322b2ed',
    'tsc':      '6a4bbc5920e4f4f195e52960',
    'das':      '6a39e461c5ff4ce3a3233e09',
    'everybe':  '6a44ed1920e4f4f195d8ecf7',
}

THREADS = []

# ── 1: @uky — Networking ──
THREADS.append({
    'poster': 'uky',
    'post': (
        "Yang underrated di era "
        "digital: NETWORKING "
        "LANGSUNG. Banyak orang "
        "sibuk nambah koneksi "
        "LinkedIn tapi gak "
        "pernah kopdar beneran. "
        "Padahal peluang besar "
        "datang dari orang yang "
        "pernah lo temui "
        "langsung. Bukan dari "
        "DM random. "
        "Bangun hubungan, "
        "bukan cuma kontak."
    ),
    'l1': ('ss', (
        "Bener. Klien paling "
        "besar kami semua "
        "dari referral & "
        "networking langsung. "
        "Bahkan di 2026, "
        "kepercayaan bisnis "
        "masih dibangun "
        "lewat interaksi "
        "tatap muka. "
        "Digital cuma pintu "
        "masuk."
    )),
    'l2': ('tsc', (
        "Di klinik kami, edukasi rutin "
        "ke pasien tiap bulan itu "
        "penting. Bukan cuma soal "
        "perawatan, tapi bikin mereka "
        "paham kondisi kulitnya. "
        "Edukasi offline = organic trust."
    )),
    'l3': ('das', (
        "Banyak pelanggan "
        "datang ke bengkel "
        "karena rekomendasi "
        "teman yang pernah "
        "servis di sini. "
        "Bukan dari "
        "iklan Google. "
        "Word of mouth "
        "masih juara."
    )),
})

# ── 2: @ss — A/B Testing ──
THREADS.append({
    'poster': 'ss',
    'post': (
        "Strategi digital "
        "paling underrated: "
        "A/B TESTING. Banyak "
        "keluar duit buat "
        "desain website & "
        "poster, tapi gak "
        "pernah di-test "
        "yang mana lebih "
        "efektif. Ganti "
        "warna tombol, "
        "judul, atau "
        "posisi CTA aja "
        "bisa naikin "
        "konversi 30%. "
        "Test, jangan tebak."
    ),
    'l1': ('uky', (
        "Saya dulu pasang "
        "iklan asal-asalan. "
        "Pas A/B testing "
        "baru tau satu "
        "kata di headline "
        "bisa bedain "
        "ribuan rupiah. "
        "Data > feeling."
    )),
    'l2': ('everybe', (
        "Di website EveryBe "
        "kami juga A/B test. "
        "Ternyata foto "
        "produk dengan "
        "latar putih "
        "konversinya 25% "
        "lebih tinggi. "
        "Hal kecil, "
        "dampak besar."
    )),
    'l3': ('tsc', (
        "Di klinik kami "
        "A/B test konten "
        "edukasi. Ternyata "
        "konten sebelum-"
        "sesudah (bukan "
        "cuma edukasi) "
        "lebih banyak "
        "dibooking. "
        "Data pasien "
        "ngasih tau."
    )),
})

# ── 3: @tsc — Cek Kulit ke Dokter ──
THREADS.append({
    'poster': 'tsc',
    'post': (
        "Yang underrated "
        "banget: CEK KULIT "
        "KE DOKTER. Banyak "
        "yang diagnose "
        "sendiri lewat "
        "Google & TikTok. "
        "Padahal ruam "
        "kecil bisa jadi "
        "eksim, alergi, "
        "atau infeksi "
        "jamur — penanganan "
        "nya beda. "
        "Trust me, "
        "50rb konsultasi "
        "lebih murah "
        "dari 500rb "
        "produk salah."
    ),
    'l1': ('ss', (
        "Analogi digital: "
        "banyak yang install "
        "plugin & tools "
        "sembarangan tanpa "
        "konsultasi ahli. "
        "Padahal konsultasi "
        "digital strategist "
        "lebih murah daripada "
        "tools gak kepake."
    )),
    'l2': ('uky', (
        "Saya dulu beli "
        "skincare mahal "
        "karena review "
        "influencer. Pas "
        "ke dokter, "
        "ternyata gak "
        "cocok. Mubazir "
        "ratusan ribu. "
        "Ahli > influencer."
    )),
    'l3': ('everybe', (
        "Bener. Makanya "
        "kami selalu "
        "saranin konsultasi "
        "dulu sebelum "
        "pake produk "
        "baru. Yang "
        "cocok buat "
        "teman belum "
        "tentu cocok "
        "buat kita."
    )),
})

# ── 4: @leit — Konsistensi Belajar ──
# NONAKTIF 28 Agu 2026 (instruksi Bos): LEIT TIDAK ikut mesin mention/diskusi Threads,
# hanya posting caption. Blok ini dihapus biar gak ada akun yang mention @leitsurabaya.

# ── 5: @everybe — Aroma Terapi ──
THREADS.append({
    'poster': 'everybe',
    'post': (
        "Self-care underrated: "
        "AROMA TERAPI. "
        "Bukan cuma "
        "wangian doang. "
        "Aroma tertentu "
        "bisa nurunin "
        "stres, ningkatin "
        "fokus, bahkan "
        "bantu tidur "
        "lebih nyenyak. "
        "Lavender buat "
        "relaksasi, "
        "peppermint buat "
        "energi, "
        "lemon buat "
        "fokus. "
        "Self-care "
        "multisensori."
    ),
    'l1': ('tsc', (
        "Dari sisi medis: "
        "aromaterapi bukan "
        "pseudoscience. "
        "Studi menunjukkan "
        "lavender essential "
        "oil menurunkan "
        "kortisol & "
        "meningkatkan "
        "kualitas tidur. "
        "Terapi komplementer "
        "yang aman."
    )),
    'l2': ('ss', (
        "Aroma juga bisa "
        "dipakai di branding. "
        "Tau gak kalo "
        "hotel tertentu "
        "punya signature "
        "scent? Aroma "
        "ningkatin brand "
        "recall 30%. "
        "Multisensory "
        "marketing."
    )),
    'l3': ('uky', (
        "Di kantor StudioSoft "
        "kami pasang "
        "diffuser dengan "
        "aroma kayu. "
        "Tim bilang "
        "suasana lebih "
        "tenang & "
        "produktif. "
        "Modal kecil, "
        "efek besar."
    )),
})


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 v4 (Batch 4) 🗣️")
    print("=" * 60)
    
    now = datetime.now(timezone.utc)
    
    # Slot: 17:00 UTC = 00:00 WIB
    start = now.replace(hour=17, minute=0, second=0, microsecond=0)
    while start <= now:
        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]}")
            success += 1
        else:
            print(f"       {res}")
            failed += 1
    
    print(f"\n{'=' * 60}")
    print(f"✅ {success} | ❌ {failed}")
    print(f"{'=' * 60}")
    print(f"\n📌 Batch 4 — 5 thread × 3 level nested = 20 post")
    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()
