"""
Threads — Cross Reply Engine
Saling reply antar 7 akun Threads secara natural.
Cek postingan terbaru tiap akun → reply dari angle masing-masing.
Jalan tiap 6 jam via cron.
"""

import base64, json, urllib.request, sys, os, random
from datetime import datetime, timezone

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

# Semua akun Threads
ACCOUNTS = {
    'ukyhandoko': '6a334e89c5ff4ce3a3225a48',
    'studiosoft.id': '6a335b9ec5ff4ce3a3225c2a',
    # 'leitsurabaya': '6a5f4af462caae1e04e8b9a6',  # DIKELUARKAN 24 Agu 2026: LEIT hanya posting caption, TIDAK ikut reply/diskusi/comment
    'tslaw': '6a35f8b7c5ff4ce3a322b2ed',
    'dniclinic_krian': '6a4bbc5920e4f4f195e52960',
    'das_bengkel': '6a39e461c5ff4ce3a3233e09',
    'everybe': '6a44ed1920e4f4f195d8ecf7',
}

HISTORY_FILE = os.path.join(os.path.dirname(__file__), 'threads_reply_history.json')

# ─── CROSS-REPLY TEMPLATES ───
# Setiap pasangan (topik_poster → akun_pemberi_reply) punya gaya reply natural

REPLIES = {
    # ── @ukyhandoko punya post → yang lain komen dari angle mereka ──
    ('ukyhandoko', 'studiosoft.id'): [
        "Dari data yang kami olah, konsistensi emang jadi faktor #1 bisnis kecil yang bertahan >5 tahun. Bukan modal gede.",
        "Setuju Mbang. Kalau dilihat dari data klien kami, bisnis yang posting rutin >3x seminggu punya engagement 2x lipat.",
        "Nah ini yang sering kita bahas di artikel StudioSoft. Konsistensi > strategi dadakan hasilnya selalu lebih baik.",
    ],
    ('ukyhandoko', 'tslaw'): [
        "Betul Mbang. Dari sisi legal, konsistensi juga penting. Banyak bisnis bangkrut karena abai dokumen & perizinan.",
        "Nambahin, Mbang. Konsistensi juga soal patuh pajak & laporan keuangan rutin. Itu fondasi bisnis sehat.",
    ],
    # LEIT DIKELUARKAN 24 Agu 2026: hanya posting caption, TIDAK ikut reply/diskusi/comment
    # ('ukyhandoko', 'leitsurabaya'): [
    #     "Ini mindset yang sama dengan belajar bahasa. Bukan les 3 jam sehari, tapi konsisten 15 menit tiap hari hasilnya lebih nyata.",
    #     "Konsisten itu kunci di pendidikan juga. Kami lihat murid yang progresnya paling cepat bukan yang paling pinter, tapi yang paling rutin.",
    # ],
    ('ukyhandoko', 'dniclinic_krian'): [
        "Sama kayak skincare Mbang. Konsisten pakai produk yang tepat > gonta-ganti produk mahal tiap bulan. Hasilnya jauh beda.",
        "Di klinik kami juga gitu. Pasien yang rutin kontrol selalu hasilnya lebih baik daripada yang dateng pas udah parah.",
    ],
    ('ukyhandoko', 'das_bengkel'): [
        "Bener Mbang. Di bengkel, mobil yang rutin servis 5000 km umurnya bisa 2x lipat dibanding yang servis pas rusak doang.",
        "Konsisten servis rutin itu yang kita anjurin ke semua pelanggan. Lebih murah jangka panjang.",
    ],
    ('ukyhandoko', 'everybe'): [
        "Nah, konsisten merawat diri juga underrated banget. Area intim juga perlu perawatan rutin, bukan pas ada masalah.",
        "Setuju. Perawatan harian yang konsisten pakai Feminine V Spray hasilnya lebih baik daripada pakai produk mahal sekali-sekali.",
    ],

    # ── @studiosoft.id punya post → yang lain komen ──
    ('studiosoft.id', 'ukyhandoko'): [
        "Dari pengalaman ngelola agency, data emang gak pernah bohong. Yang susah itu bikin pebisnis mau lihat data.",
        "Betul. Makanya kita selalu dorong klien pasang Google Analytics dari awal. Biar keputusan berbasis data, bukan feeling.",
    ],
    ('studiosoft.id', 'tslaw'): [
        "Data pribadi & data pelanggan juga punya implikasi hukum lho. UU PDP wajib dipatuhi. Data tanpa kepatuhan = risiko.",
        "Nambahin: digital footprint juga soal data retention. Berapa lama data disimpan, bagaimana cara hapusnya — itu ada aturannya.",
    ],
    # ('studiosoft.id', 'leitsurabaya'): [  # LEIT DIKELUARKAN 24 Agu 2026
    #     "Literasi data ini skill yang harus diajarin sejak sekolah. Banyak lulusan gak paham bedanya data & opini.",
    #     "Bener. Critical thinking + data literacy = kombinasi paling dicari perusahaan sekarang.",
    # ],
    ('studiosoft.id', 'dniclinic_krian'): [
        "Di klinik kami juga pakai data untuk lihat tren pasien & efektivitas treatment. Data-driven healthcare.",
        "Data juga penting buat riset skincare. Reaksi kulit tiap orang beda — data bantu kasih rekomendasi yang tepat.",
    ],
    ('studiosoft.id', 'das_bengkel'): [
        "Data juga penting di bengkel. Catatan riwayat servis, part yang sering ganti, pola kerusakan — itu data berharga.",
        "Bengkel yang punya data pelanggan & riwayat servis bisa ngasih layanan yang lebih personal.",
    ],
    ('studiosoft.id', 'everybe'): [
        "Data kebutuhan konsumen juga penting buat produk personal care. Tren bahan alami naik 40% tahun ini.",
        "Setuju. Makanya EveryBe pakai ekstrak daun sirih — ada data risetnya secara ilmiah, bukan cuma tradisi.",
    ],

    # ── @dniclinic_krian punya post → yang lain komen ──
    ('dniclinic_krian', 'studiosoft.id'): [
        "Ini analogi yang pas banget. Basic itu fondasi, mau di skincare, bisnis, atau otomotif.",
        "Di era AI, data + basic yang solid makin penting. Teknologi cuma alat, fondasi tetap manusia.",
    ],
    ('dniclinic_krian', 'ukyhandoko'): [
        "Nah, basic yang baik itu underrated. Banyak yang pengen instant glowing padahal kulit butuh waktu adaptasi.",
        "Betul Mbang. Sama kayak bikin bisnis, fondasi harus kuat dulu baru scale up.",
    ],
    ('dniclinic_krian', 'everybe'): [
        "Produk pembersih yang tepat itu basic Banget. Sabun salah pilih = skin barrier rusak = jerawat & iritasi.",
        "Nah, di klinik kami banyak pasien yang iritasi karena pilih cleanser asal. Padahal kuncinya simple: sesuai jenis kulit.",
    ],
    # ('dniclinic_krian', 'leitsurabaya'): [  # LEIT DIKELUARKAN 24 Agu 2026
    #     "Edukasi skincare juga perlu literasi. Banyak pasien dapat info dari TikTok yang belum tentu bener secara dermatologi.",
    #     "Penting banget belajar dari sumber yang tepat. Speaking English juga bantu akses jurnal dermatologi internasional.",
    # ],

    # ── @leitsurabaya punya post → yang lain komen ──
    # SEMUA pasangan dengan @leitsurabaya DIKELUARKAN 24 Agu 2026: LEIT hanya posting caption,
    # TIDAK ikut reply/diskusi/comment. Blok di bawah sengaja dinonaktifkan.
    # ('leitsurabaya', 'studiosoft.id'): [
    #     "Adaptability ini yang kita ajarkan juga di digital marketing. Algoritma berubah, platform baru muncul — yang gak adaptif ketinggalan.",
    #     "Nah, kemampuan adaptasi teknologi juga penting. AI tools berkembang cepat, yang bisa pake akan unggul.",
    # ],
    # ('leitsurabaya', 'ukyhandoko'): [
    #     "Setuju Mbang. Waktu rekrut, saya juga prioritaskan attitude & growth mindset. Skill bisa diajarin.",
    #     "Bener. Banyak orang pinter tapi gak bisa adaptasi — akhirnya kalah sama yang mau belajar terus.",
    # ],
    # ('leitsurabaya', 'tslaw'): [
    #     "Critical thinking penting waktu baca kontrak atau perjanjian. Jangan asal tanda tangan tanpa paham konsekuensinya.",
    #     "Banyak kasus hukum terjadi karena kurang critical thinking waktu bikin kesepakatan bisnis.",
    # ],
    # ('leitsurabaya', 'das_bengkel'): [
    #     "Adaptasi juga penting buat bengkel. Sekarang mobil hybrid & EV makin banyak — bengkel harus update skill.",
    #     "Bener. Teknisi yang mau belajar teknologi baru pasti lebih dicari ke depannya.",
    # ],
    # ('leitsurabaya', 'everybe'): [
    #     "Konsumen sekarang juga makin kritis. Mereka riset produk dulu sebelum beli — jadi edukasi itu kunci.",
    #     "Penting banget. Produk yang bagus harus diiringi edukasi yang bener ke konsumen, bukan cuma jualan.",
    # ],

    # ── @das_bengkel punya post → yang lain komen ──
    ('das_bengkel', 'studiosoft.id'): [
        "Nah, ini bisa dianalogikan sama maintenance website. Update rutin, backup, monitoring — itu spooringnya dunia digital.",
        "Bener. Website juga perlu 'service rutin': update plugin, optimasi speed, cek broken links. Sama kayak mobil.",
    ],
    ('das_bengkel', 'ukyhandoko'): [
        "Preventive > reactive itu mindset yang harus diterapin di semua aspek bisnis, Mbang.",
        "Iya Mbang. Saya dulu juga abai maintenance sampai akhirnya keluar biaya besar. Pelajaran berharga.",
    ],
    ('das_bengkel', 'tslaw'): [
        "Preventive legal audit sama pentingnya. Jangan nunggu dituntut baru urus dokumen.",
        "Maintenance rutin juga soal legalitas usaha. Perpanjang SIUP, NIB, pajak — itu 'service' bisnis.",
    ],
    ('das_bengkel', 'tsc'): [
        "Sama kayak check-up kulit ke dokter. Deteksi dini lebih murah & efektif daripada ngobatin yang udah parah.",
        "Nah, preventive healthcare itu investasi. Perawatan rutin > pengobatan mahal di rumah sakit.",
    ],
    ('das_bengkel', 'everybe'): [
        "Nah, pemakaian Feminine V Spray rutin itu 'preventive maintenance'-nya kesehatan intim. Jangan nunggu bermasalah.",
        "Pas banget. Preventive care itu lebih murah & lebih baik daripada reactive care. Di mana aja sama prinsipnya.",
    ],

    # ── @everybe punya post → yang lain komen ──
    ('everybe', 'tsc'): [
        "Betul banget. Sabun mandi pH 8-10, area intim 3.5-4.5. Gak cocok, pasti iritasi jangka panjang.",
        "Ini yang sering kami edukasi ke pasien. Banyak yang gak sadar penyebab iritasinya dari sabun mandi.",
    ],
    ('everybe', 'ukyhandoko'): [
        "Nah, edukasi kayak gini yang perlu lebih banyak disebar. Kesehatan intim masih dianggap tabu padahal penting.",
        "Bener Mbang. Saya aja baru tau setelah baca. Artinya edukasi masih kurang masif.",
    ],
    ('everybe', 'studiosoft.id'): [
        "Ini PR besar buat content creator & digital marketer. Konten edukatif tentang kesehatan intim masih langka.",
        "Setuju. Konten edukasi kesehatan punya potensi besar. Orang haus informasi bermanfaat, bukan cuma hiburan.",
    ],
    # ('everybe', 'leitsurabaya'): [  # LEIT DIKELUARKAN 24 Agu 2026
    #     "Pengetahuan itu empowering. Makin banyak yang tau cara merawat organ intim dengan benar, makin sehat wanita Indonesia.",
    #     "Tepat. Ini bagian dari pendidikan yang terlewat. Kesehatan reproduksi harus diajarkan sejak remaja.",
    # ],
    ('everybe', 'das_bengkel'): [
        "Wah, analoginya pas banget. Pilih produk salah = risiko kesehatan. Sama kayak pilih oli salah = mesin jebol.",
        "Iya, prinsipnya sama: pilih yang sesuai spesifikasi, bukan yang paling mahal atau paling terkenal.",
    ],
    ('everybe', 'tslaw'): [
        "Edukasi produk juga harus sesuai aturan. Klaim kesehatan ada batasannya biar gak menyesatkan konsumen.",
        "Iya, BPOM & regulasi iklan produk kesehatan perlu dipatuhi. Konsumen berhak dapat informasi yang akurat.",
    ],
}


def get_post_id(schedule_result):
    """Extract post ID from schedule result"""
    if isinstance(schedule_result, dict):
        # Try various possible keys
        for key in ['postId', 'id', '_id', 'scheduleId']:
            if key in schedule_result:
                return schedule_result[key]
    return None


def schedule_reply(account_id, post_id, description):
    """Reply to an existing post"""
    payload = {
        'accountId': account_id,
        'postId': post_id,
        'description': description,
        'type': 'reply',
    }
    data = json.dumps(payload).encode('utf-8')
    req = urllib.request.Request(
        f'{BASE}/public/schedule/reply',
        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 load_history():
    """Load reply history to avoid duplicate replies"""
    if os.path.exists(HISTORY_FILE):
        try:
            with open(HISTORY_FILE) as f:
                return json.load(f)
        except:
            return {'replies': []}
    return {'replies': []}


def save_history(history):
    os.makedirs(os.path.dirname(HISTORY_FILE) or '.', exist_ok=True)
    with open(HISTORY_FILE, 'w') as f:
        json.dump(history, f, indent=2)


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

    history = load_history()
    replied = set(tuple(r) for r in history.get('replies', []))
    
    success = 0
    failed = 0
    skipped = 0

    # Untuk setiap akun, cek postingan terbaru
    for poster_name, poster_id in ACCOUNTS.items():
        print(f"\n📱 @{poster_name}")
        
        # Cek postingan terbaru akun ini
        # (pakai get_schedules tapi filter by account)
        # Note: API endpoint mungkin berbeda untuk get recent posts
        
        # Simulasi reply untuk setiap pasangan replier
        for replier_name, replier_id in ACCOUNTS.items():
            if replier_name == poster_name:
                continue  # Jangan reply ke diri sendiri
                
            # Cek di templates
            key = (poster_name, replier_name)
            if key not in REPLIES:
                continue
            
            # Cek udah pernah reply?
            history_key = (poster_name, replier_name, 'template')
            if history_key in replied:
                skipped += 1
                continue
            
            # Pilih reply random dari template
            templates = REPLIES[key]
            reply_text = random.choice(templates)
            
            if len(reply_text) > 500:
                reply_text = reply_text[:497] + "..."
            
            print(f"  📝 @{replier_name} -> @{poster_name}")
            
            # Tambah ke history (biar gak duplikat pas jalan berikutnya)
            history['replies'].append(list(history_key))
            
            # Simulasi aja dulu — actual reply nanti via API post
            print(f"     ✅ [simulasi] {reply_text[:60]}...")
            success += 1

    # Simpan history
    save_history(history)
    
    print(f"\n{'=' * 60}")
    print(f"Hasil: ✅ {success} reply siap | ❌ {failed} | ⏭️ {skipped} sudah pernah")
    print(f"{'=' * 60}")
    print()
    print("📌 CATATAN: Reply ke existing post perlu endpoint reply dari Repliz")
    print("   Saat ini masih simulasi + template. Kalo API reply udah siap,")
    print("   tinggal aktifin fungsi schedule_reply().")


if __name__ == '__main__':
    main()
