"""
Threads — Nested 3 Level v3
5 thread baru, topik "underrated" fresh.
Slot: 07, 13, 19, 01, 07 WIB (selingan antar existing)
"""

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',
}

THREADS = []

# ── 1: @uky — Menerima Feedback ──
THREADS.append({
    'poster': 'uky',
    'post': (
        "Skill paling underrated "
        "buat pengusaha: MENERIMA "
        "FEEDBACK. Bukan ngasih "
        "feedback — itu gampang. "
        "Tapi dengerin kritik "
        "tanpa defensif, "
        "nyaring mana yang "
        "berguna, dan beneran "
        "berubah. Itu susah. "
        "Tapi itu yang bikin "
        "bisnis naik level."
    ),
    'l1': ('ss', (
        "Data mendukung: bisnis "
        "yang rutin survei "
        "kepuasan pelanggan "
        "& beneran bertindak "
        "atas feedback punya "
        "churn rate 40% lebih "
        "rendah. Dengerin "
        "pelanggan = strategi."
    )),
    'l2': ('leit', (
        "Di kelas kami, murid "
        "yang progressnya "
        "paling cepat adalah "
        "yang berani dikoreksi "
        "& minta feedback. "
        "Bukan yang paling "
        "pinter, tapi yang "
        "paling open minded."
    )),
    'l3': ('das', (
        "Di bengkel, pelanggan "
        "yang ngasih tau "
        "kekurangan servis "
        "kami — itu rejeki. "
        "Kalo diemin doang, "
        "mereka pindah ke "
        "bengkel lain. "
        "Feedback = petunjuk "
        "bertahan hidup."
    )),
})

# ── 2: @ss — Customer Service ──
THREADS.append({
    'poster': 'ss',
    'post': (
        "Yang underrated di "
        "digital marketing: "
        "CUSTOMER SERVICE. "
        "Banyak habis duit "
        "buat iklan, tapi "
        "kalo ada yang "
        "nanya lewat WA, "
        "dibalas 2 hari "
        "kemudian. Padahal "
        "CS yang cepet & "
        "ramah itu marketing "
        "paling murah. "
        "Word of mouth "
        "gak bisa dibeli."
    ),
    'l1': ('uky', (
        "Betul. Saya pribadi "
        "pernah gak jadi beli "
        "produk karena CS "
        "nya jutek. Padahal "
        "produknya bagus. "
        "CS jelek = "
        "brand rusak. "
        "Simpel."
    )),
    'l2': ('tslaw', (
        "Dari legal: CS yang "
        "ngarang janji bisa "
        "bikin perusahaan "
        "digugat. Klaim "
        "berlebihan tanpa "
        "bukti = masalah "
        "hukum. CS harus "
        "tau batasan."
    )),
    'l3': ('everybe', (
        "Di EveryBe, kami "
        "pastikan setiap "
        "pertanyaan pelanggan "
        "tentang produk "
        "dijawab dalam "
        "hitungan jam, "
        "bukan hari. "
        "Kepercayaan itu "
        "dibangun dari "
        "respon cepat."
    )),
})

# ── 3: @tsc — Sunscreen Indoor ──
THREADS.append({
    'poster': 'tsc',
    'post': (
        "Skincare paling "
        "underrated: SUNSCREEN "
        "DI DALAM RUANGAN. "
        "Banyak pikir 'di "
        "rumah aja, gak "
        "pake sunscreen' — "
        "padahal sinar UVA "
        "tembus kaca & "
        "awan. Itu penyebab "
        "penuaan dini & "
        "noda hitam. "
        "Indoor atau outdoor, "
        "sunscreen itu wajib."
    ),
    'l1': ('ss', (
        "Bisa dianalogikan "
        "dengan keamanan "
        "data. Banyak "
        "pikir 'saya bisnis "
        "kecil, gak bakal "
        "di-hack'. Padahal "
        "70% serangan siber "
        "targetnya UMKM. "
        "Security harus 24/7, "
        "gak pilih waktu."
    )),
    'l2': ('uky', (
        "Saya dulu males "
        "pake sunscreen "
        "kalo di dalem "
        "rumah. Pas "
        "kulit mulai "
        "flek baru "
        "nyesel. Full "
        "facepalm moment."
    )),
    'l3': ('everybe', (
        "Sama kayak "
        "perawatan organ "
        "intim. Banyak "
        "baru peduli pas "
        "udah ada masalah. "
        "Padahal pencegahan "
        "rutin — kayak "
        "pake Feminine V "
        "Spray setiap "
        "hari — itu "
        "investasi jangka "
        "panjang."
    )),
})

# ── 4: @leit — Menulis Tangan ──
THREADS.append({
    'poster': 'leit',
    'post': (
        "Kebiasaan paling "
        "underrated: MENULIS "
        "TANGAN. Bukan ngetik, "
        "bukan voice note. "
        "Tapi beneran nulis "
        "pakai pulpen & kertas. "
        "Penelitian bilang "
        "nulis tangan "
        "mengaktifkan area "
        "otak yang beda, "
        "meningkatkan daya "
        "ingat & kreativitas. "
        "Coba 10 menit "
        "sehari — jurnal, "
        "ide, atau "
        "to-do list."
    ),
    'l1': ('ss', (
        "Bener. Saya selalu "
        "bawa notebook. "
        "Meeting penting "
        "saya catat manual, "
        "gak di laptop. "
        "Retensinya beda — "
        "saya inget letak "
        "coretan & gambar "
        "di halaman. "
        "Otak kerja beda."
    )),
    'l2': ('uky', (
        "Saya juga! Semua "
        "ide bisnis saya "
        "di notes fisik. "
        "Kadang pas nulis "
        "tangan, koneksi "
        "baru di otak "
        "muncul. Gak "
        "terjadi kalo "
        "ngetik."
    )),
    'l3': ('tslaw', (
        "Untuk legal draft, "
        "saya sering corat-"
        "coret di kertas "
        "dulu sebelum "
        "diketik rapi. "
        "Pola pikir "
        "lebih terstruktur "
        "kalo lewat "
        "tulisan tangan."
    )),
})

# ── 5: @everybe — Baca Label Produk ──
THREADS.append({
    'poster': 'everybe',
    'post': (
        "Hal paling underrated "
        "sebelum beli produk: "
        "BACA LABEL. Bukan "
        "cuma lihat kemasan "
        "cantik & harga "
        "murah. Tapi beneran "
        "baca komposisi, "
        "kadaluarsa, izin "
        "BPOM, cara pakai. "
        "Banyak iritasi & "
        "alergi terjadi "
        "karena konsumen "
        "gak baca label."
    ),
    'l1': ('tsc', (
        "Sebagai dokter, "
        "saya sering lihat "
        "pasien alergi "
        "akibat produk tanpa "
        "BPOM atau yang "
        "kandungannya gak "
        "cocok. Baca label "
        "itu langkah "
        "pencegahan paling "
        "dasar & gratis."
    )),
    'l2': ('tslaw', (
        "Label juga masalah "
        "hukum. Produk yang "
        "gak mencantumkan "
        "informasi lengkap "
        "bisa kena sanksi "
        "BPOM & UU "
        "Perlindungan "
        "Konsumen. "
        "Hak konsumen "
        "untuk tau."
    )),
    'l3': ('das', (
        "Di bengkel juga "
        "sama. Baca label "
        "oli: kekentalan, "
        "spesifikasi, "
        "standar API. "
        "Salah pilih oli "
        "= mesin rusak. "
        "Label itu "
        "informasi vital."
    )),
})


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 v3 (Batch 3) 🗣️")
    print("=" * 60)
    
    now = datetime.now(timezone.utc)
    
    # Slot: 00:00 UTC = 07:00 WIB (selingan)
    start = now.replace(hour=0, 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 3 — 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()
