"""
Threads — Nested 3 Level v5 (Batch 5)
Cross-niche mention & question format
Tiap akun bahas nichenya, tag akun lain + pertanyaan
"""

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 — SEO vs Legal ──
THREADS.append({
    'poster': 'uky',
    'post': (
        "Banyak UMKM nanya soal SEO: "
        "\"Website udah muncul di Google, "
        "orderan naik 3x lipat, tapi tiba-tiba "
        "ada yang komplain soal pajak & izin "
        "usaha.\" Nah, @tslaw_id, "
        "apa aja sih yang harus disiapin UMKM "
        "dari sisi legal begitu bisnis mulai "
        "meledak gara-gara SEO?"
    ),
    'l1': ('tslaw', (
        "Pertanyaan bagus! Begitu orderan naik, "
        "UMKM wajib: 1️ NIB (Nomor Induk Berusaha) "
        "— wajib punya kalo udah jualan online. "
        "2️ NPWP — buat lapor pajak penghasilan. "
        "3️ Merek dagang — biar gak diklaim orang "
        "lain. Ini dasar, banyak yang skip."
    )),
    'l2': ('ss', (
        "Nambahin: banyak UMKM yang SEO-nya bagus "
        "tapi legalnya kosong. Pas mau kerja sama "
        "sama korporasi besar, ditolak karena "
        "gak punya badan usaha. SEO bikin traffik, "
        "legal bikin trust. Dua-duanya harus jalan."
    )),
    'l3': ('das', (
        "Di bengkel kami juga gitu. Pas mulai "
        "banyak order dari Google, langsung urus "
        "SIUP & NPWP. Soalnya kalo udah omset "
        "besar, pemeriksaan pajak tinggal "
        "nunggu waktu. Siapin dari awal."
    )),
})

# ── 2: @ss — Digital Marketing untuk Klinik ──
THREADS.append({
    'poster': 'ss',
    'post': (
        "Klinik & dokter mulai sadar pentingnya "
        "digital marketing. Tapi masih banyak "
        "yang bingung: \"Mending bikin konten "
        "edukasi di IG atau bikin website dulu?\" "
        "@dniclinic_krian, dari sisi dokter, "
        "platform mana yang paling efektif "
        "buat nambah pasien baru?"
    ),
    'l1': ('tsc', (
        "Dari pengalaman: website itu fundamental. "
        "Pasien selalu cek profil dokter & layanan "
        "sebelum booking. IG penting buat "
        "awareness, tapi website jadi tempat "
        "konversi. Kombinasi dua-duanya paling "
        "optimal. Plus Google Business Profile "
        "wajib — banyak pasien cari lewat Google Maps."
    )),
    'l2': ('leit', (
        "Sama kayak di LEIT. Orang tua murid "
        "pertama kali liat website kami, baru "
        "datang langsung. Website itu etalase "
        "digital. Kalo websitenya jelek atau "
        "lambat, kesan pertama langsung jelek."
    )),
    'l3': ('uky', (
        "Betul. Data kami: klinik dengan website "
        "+ GBP + IG aktif dapet 60% lebih banyak "
        "pasien baru dibanding yang cuma punya IG. "
        "Bukan milih salah satu, tapi integrasi "
        "semua channel."
    )),
})

# ── 3: @tsc — Skincare & Regulasi ──
THREADS.append({
    'poster': 'tsc',
    'post': (
        "Pasien sering bawa produk skincare "
        "yang belinya online, katanya "
        "\"rekomendasi influencer\". Pas dicek, "
        "produknya gak ada izin BPOM. Bahaya "
        "banget! @everybe, sebagai brand "
        "personal care, gimana cara mastiin "
        "produk udah aman & sesuai regulasi "
        "sebelum dipasarkan?"
    ),
    'l1': ('everybe', (
        "Regulasi itu prioritas utama! Setiap "
        "produk EveryBe wajib: 1️ Uji lab — "
        "stabilitas, mikroba, logam berat. "
        "2️ Izin BPOM — prosesnya panjang tapi "
        "wajib. 3️ Sertifikat halal. Tanpa "
        "izin, produk gak boleh beredar. "
        "Influencer boleh rekomen, tapi kami "
        "pastikan produk aman duluan."
    )),
    'l2': ('ss', (
        "Ini penting juga buat digital marketing. "
        "Brand dengan izin lengkap lebih mudah "
        "di-promote. Platform iklan juga lebih "
        "mudah approve konten. Legal clearance "
        "itu aset marketing."
    )),
    'l3': ('tslaw', (
        "Dari sisi hukum: menjual produk tanpa "
        "izin BPOM bisa kena sanksi pidana "
        "(UU Kesehatan & UU Perlindungan "
        "Konsumen). Denda miliaran atau "
        "kurungan. Jadi jangan pernah "
        "kompromi soal izin."
    )),
})

# ── 4: @leit — Pendidikan & Digital ──
THREADS.append({
    'poster': 'leit',
    'post': (
        "Banyak kursus bahasa Inggris "
        "ngandelin metode lama: baca buku, "
        "hafal grammar, tes tulis. Tapi "
        "di 2026, murid butuh Speaking Based "
        "+ Leadership Based. @studiosoft.id, "
        "menurut data & riset kalian, gimana "
        "sih tren pendidikan digital di "
        "Indonesia sekarang?"
    ),
    'l1': ('ss', (
        "Data kami: 73% orang tua milih lembaga "
        "pendidikan berdasarkan metode "
        "pengajaran, bukan harga. Tren "
        "terbesar: blended learning (offline + "
        "online), gamifikasi, dan "
        "personalized learning path. Orang "
        "tua makin cerdas milih."
    )),
    'l2': ('uky', (
        "Saya juga liat: lembaga pendidikan "
        "yang aktif digital marketing bisa "
        "dapet 3x lebih banyak pendaftar. "
        "Konten edukasi (tips belajar, "
        "testimoni murid) > konten jualan "
        "langsung. Trust building."
    )),
    'l3': ('tslaw', (
        "Legal tip: pastikan izin lembaga "
        "kursus (izin Diknas) udah aktif. "
        "Banyak lembaga kursus kena "
        "sanksi karena gak punya izin "
        "operasional. Ini sering "
        "diremehkan."
    )),
})

# ── 5: @das — Perawatan Mobil ──
THREADS.append({
    'poster': 'das',
    'post': (
        "Banyak pelanggan tanya: \"Mobil "
        "saya udah 50rb km, apa yang "
        "harus diganti selain oli?\" "
        "Jawabannya: BANYAK! Timing belt, "
        "filter bensin, busi, coolant, "
        "suspension check. @ukyhandoko, "
        "dari sisi bisnis, gimana cara "
        "ngedukasi pelanggan biar gak "
        "kaget sama biaya perawatan?"
    ),
    'l1': ('uky', (
        "Kuncinya: transparansi. Bikin "
        "tabel biaya perawatan rutin per "
        "10rb km di website. Pasang di "
        "Google Business Profile juga. "
        "Pelanggan yang tau estimasi "
        "biaya dari awal gak bakal "
        "kaget & lebih percaya."
    )),
    'l2': ('ss', (
        "Bisa juga bikin konten edukasi "
        "di Threads & FB. \"Apa itu "
        "timing belt? Kenapa harus "
        "ganti tiap 60rb km?\" Konten "
        "seperti ini bikin pelanggan "
        "paham nilai servis, bukan "
        "cuma lihat harga."
    )),
    'l3': ('everybe', (
        "Analoginya kayak skincare. "
        "Banyak yang baru sadar "
        "butuh toner + serum + "
        "moisturizer setelah dikasih "
        "tau fungsinya masing-masing. "
        "Edukasi itu kunci biar "
        "orang mau investasi."
    )),
})

# ── 6: @everybe — Self-care ──
THREADS.append({
    'poster': 'everybe',
    'post': (
        "Self-care itu bukan cuma "
        "produk, tapi juga kebiasaan. "
        "Banyak wanita pake 5 produk "
        "skincare tapi lupa jaga "
        "kesehatan dari dalam. "
        "@dniclinic_krian, kira-kira "
        "kebiasaan harian apa yang "
        "paling sering diremehkan "
        "tapi dampaknya besar "
        "buat kesehatan kulit?"
    ),
    'l1': ('tsc', (
        "Yang paling sering: KURANG "
        "MINUM & KURANG TIDUR. "
        "Kulit kusam, jerawat "
        "membandel, lingkaran "
        "hitam — 80% penyebabnya "
        "bukan produk, tapi "
        "pola hidup. Produk "
        "hanya bantu 20%."
    )),
    'l2': ('leit', (
        "Bisa dibilang ini 'basic "
        "self-care routine'. Sama "
        "kaya belajar bahasa: "
        "konsisten 15 menit "
        "setiap hari > belajar "
        "3 jam seminggu sekali. "
        "Kebiasaan > intensitas."
    )),
    'l3': ('das', (
        "Ibarat mobil: ganti oli "
        "tepat waktu lebih penting "
        "daripada pake bensin "
        "termahal. Perawatan "
        "dasar yang konsisten "
        "hasilnya lebih baik."
    )),
})


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=45) 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 v5 (Batch 5) 🗣️")
    print("Cross-niche Mention & Question Format")
    print("=" * 60)
    
    now = datetime.now(timezone.utc)
    
    # Slot schedule mulai dari jam berikutnya (dibulatkan ke jam)
    start_hour = now.hour + 1
    start = now.replace(hour=start_hour % 24, minute=0, second=0, microsecond=0)
    if start_hour >= 24:
        start += timedelta(days=1)
    
    # Kalo masih kurang dari now, geser 1 hari
    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=4 * 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 5 — 6 thread × 3 level nested = 24 post")
    for i, t in enumerate(THREADS):
        pt = start + timedelta(hours=4*i)
        wib = (pt + timedelta(hours=7)).strftime('%H:%M WIB')
        print(f"   #{i+1} @{t['poster']} → {wib}")


if __name__ == '__main__':
    main()
