#!/usr/bin/env python3
"""
Yasma Natura — Threads Scheduler.
Post nested thread tiap hari tentang maklon minuman serbuk, tips brand minuman, dll.
Prime time: 17:00/20:00/23:00 WIB, minimal 2x sehari.
Konten dari artikel yasmanatura.co.id tanpa link.
"""
import json, urllib.request, sys, os
from datetime import datetime, timezone, timedelta

from repliz_client import HEADERS, BASE
from threads_text_check import cek_teks_threads, ThreadsTextError

LOG_FILE = "/home/mantapman/.hermes/profiles/atun/workspace/threads_log.txt"
STATE_FILE = "/home/mantapman/.hermes/profiles/atun/workspace/yasma_threads_state.json"

WIB = timezone(timedelta(hours=7))

ACCOUNT = {
    "id": "6a3b41e3c5ff4ce3a327544b",
    "name": "Yasma Natura",
}

# === BANK KONTEN YASMA NATURA ===
# Tentang maklon minuman serbuk, tips brand minuman, wirausaha
# 8 series, ≤ 500 chars, tanpa link website
CONTENT_SERIES = [
    # Series 1: Apa itu Maklon
    [
        (
            "Pengen punya brand minuman sendiri tapi gak punya pabrik? Tenang,\n"
            "ada yang namanya sistem MAKLON. 🏭✨\n"
            "\n"
            "Maklon itu jasa produksi di mana kamu tinggal punya brand & resep,\n"
            "pabrik yang bikin. Cocok banget buat pemula yang mau:\n"
            "\n"
            "✅ Mulai bisnis tanpa modal besar\n"
            "✅ Fokus di branding & marketing aja\n"
            "✅ Produksi udah standar & berizin\n"
            "\n"
            "Banyak brand minuman kekinian lahir dari sistem maklon loh!\n"
            "Mau tau caranya? 😊\n"
            "\n"
            "#YasmaNatura #MaklonMinuman #TipsBisnis"
        ),
        (
            "Keuntungan pake sistem maklon — daripada bikin pabrik sendiri! 🏭\n"
            "\n"
            "1️⃣ Modal lebih kecil — gak perlu beli mesin & bangun pabrik\n"
            "2️⃣ Riset & formula — tim R&D udah siap, tinggal diskusi\n"
            "3️⃣ Izin lengkap — BPOM & halal diurusin pabrik\n"
            "4️⃣ Skalabel — mau produksi 100 atau 10.000 pcs, bisa\n"
            "\n"
            "Intinya: kamu fokus ke brand & marketing, produksi serahin ke ahlinya.\n"
            "\n"
            "Udah siap bikin brand minuman sendiri? 😎\n"
            "\n"
            "#YasmaNatura #MaklonMinuman #Wirausaha"
        ),
        (
            "Siapa aja yang cocok pake sistem maklon? 🤔\n"
            "\n"
            "✅ Calon pengusaha — pengen punya brand sendiri tanpa ribet\n"
            "✅ UMKM — mau nambah lini produk minuman\n"
            "✅ Influencer — mau bikin brand minuman sendiri\n"
            "✅ Katering/cafe — pengen produk eksklusif\n"
            "\n"
            "Minimal ordernya juga terjangkau — mulai ratusan pcs aja udah bisa.\n"
            "\n"
            "Bisnis minuman serbuk makin naik daun. Sekarang saatnya kamu\n"
            "ambil peluang! 🚀💪\n"
            "\n"
            "#YasmaNatura #MaklonMinuman #PeluangBisnis"
        ),
    ],
    # Series 2: Tips Pilih Produk
    [
        (
            "Bingung milih produk minuman pertama? Jangan asal pilih! 🎯\n"
            "\n"
            "Tips milih produk buat brand kamu:\n"
            "🔸 Kenali target pasar — siapa yang bakal beli?\n"
            "🔸 Cek tren — minuman kesehatan? Kecantikan? Energi?\n"
            "🔸 Sesuaikan kanal distribusi — online atau offline?\n"
            "\n"
            "Misalnya:\n"
            "👉 Target Gen Z → minuman estetik, rendah gula\n"
            "👉 Target ibu rumah tangga → minuman kesehatan keluarga\n"
            "👉 Target atlet/fitness → minuman isotonik / protein\n"
            "\n"
            "Produk yang tepat = 50% kesuksesan! 💡\n"
            "\n"
            "#YasmaNatura #TipsBisnis #MaklonMinuman"
        ),
        (
            "Minuman serbuk itu bukan cuma kopi & susu bubuk loh!\n"
            "Sekarang variannya macem-macem 👇\n"
            "\n"
            "🍵 Teh premium — matcha, teh hijau, teh bunga\n"
            "🥤 Minuman kesehatan — kolagen, vitamin C, jahe\n"
            "🍑 Minuman rasa buah — mangga, leci, anggur\n"
            "🥛 Minuman nabati — almond milk, oat milk\n"
            "⚡ Minuman energi — elektrolit, kafein\n"
            "\n"
            "Mau bikin varian apa? Tim R&D pabrik maklon siap\n"
            "bantu wujudin formula impian kamu! 🔬✨\n"
            "\n"
            "#YasmaNatura #VarianMinuman #Maklon"
        ),
        (
            "Riset pasar sebelum bikin produk itu WAJIB! 📊\n"
            "\n"
            "Caranya gampang:\n"
            "✅ Cek Google Trends — apa yang lagi viral?\n"
            "✅ Cek e-commerce — best seller di kategori minuman apa?\n"
            "✅ Survey kecil-kecilan — tanya 20-30 orang target pasar\n"
            "✅ Cek sosial media — hashtag apa yang lagi rame?\n"
            "\n"
            "Jangan bikin produk cuma karena \"rasanya enak menurut kamu\".\n"
            "Yang penting: enak menurut target pasar! 🎯😊\n"
            "\n"
            "#YasmaNatura #RisetPasar #TipsBisnis"
        ),
    ],
    # Series 3: Brand Identity
    [
        (
            "Brand identity — ini yang bikin produk kamu beda dari kompetitor! 🌟\n"
            "\n"
            "Elemen penting:\n"
            "🔹 Nama brand — unik, mudah diingat, gak pasaran\n"
            "🔹 Logo — profesional, beda dari yang lain\n"
            "🔹 Kemasan — menarik, informatif, instagramable\n"
            "🔹 Tagline — singkat, kuat, nyantol di hati\n"
            "\n"
            "Kemasan yang bagus itu bisa jadi silent salesman!\n"
            "Produk sama, kemasan beda — hasil penjualan bisa beda jauh.\n"
            "\n"
            "Investasi di brand identity itu bukan biaya — itu investasi! 💼\n"
            "\n"
            "#YasmaNatura #BrandIdentity #TipsBranding"
        ),
        (
            "Kemasan produk — jangan anggap remeh! 📦\n"
            "\n"
            "Faktanya:\n"
            "🔸 70% keputusan beli terjadi di rak/etalase\n"
            "🔸 Konsumen butuh <3 detik buat memutuskan\n"
            "🔸 Kemasan menarik bisa naikin penjualan 30%+\n"
            "\n"
            "Tips kemasan minuman serbuk:\n"
            "✅ Warna sesuai brand — konsisten di semua produk\n"
            "✅ Informasi jelas — rasa, kandungan, cara seduh\n"
            "✅ Ukuran sesuai — sachet untuk sample, jar untuk stok\n"
            "\n"
            "Mau konsultasi kemasan? Pabrik maklon biasanya punya\n"
            "referensi desain & bahan kemasan! 🎨✨\n"
            "\n"
            "#YasmaNatura #KemasanProduk #Branding"
        ),
        (
            "Brand voice — cara kamu ngobrol sama konsumen. 🗣️\n"
            "\n"
            "Gak bisa asal-asalan! Brand voice harus konsisten:\n"
            "\n"
            "🔸 Produk kesehatan — voice: profesional, terpercaya, informatif\n"
            "🔸 Produk anak muda — voice: santai, gaul, pake bahasa kekinian\n"
            "🔸 Produk premium — voice: elegan, eksklusif, sopan\n"
            "\n"
            "Facebook, Instagram, TikTok, WA — semuanya harus pake\n"
            "satu suara biar brand makin kuat & dikenali.\n"
            "\n"
            "Udah punya brand voice? 😊🎯\n"
            "\n"
            "#YasmaNatura #BrandVoice #TipsBranding"
        ),
    ],
    # Series 4: Pilih Mitra Maklon
    [
        (
            "Pilih mitra maklon itu kayak milih partner bisnis — jangan asal! 🤝\n"
            "\n"
            "Yang harus dicek:\n"
            "✅ Legalitas — punya izin edar & sertifikasi?\n"
            "✅ Fasilitas — pabrik bersih, mesin modern?\n"
            "✅ Tim R&D — bisa bantu formula & rasa?\n"
            "✅ Portofolio — udah bikin brand apa aja?\n"
            "✅ Komunikasi — responsif & transparan?\n"
            "\n"
            "Mitra maklon yang oke bakal bantu kamu dari A sampai Z.\n"
            "Dari formula, produksi, sampai urus izin!\n"
            "\n"
            "Jangan pilih cuma karena murah — kualitas lebih penting! 👌\n"
            "\n"
            "#YasmaNatura #MitraMaklon #TipsBisnis"
        ),
        (
            "Sebelum tanda tangan kontrak maklon, tanya 5 hal ini! 🤔\n"
            "\n"
            "1️⃣ Berapa MOQ (Minimum Order Quantity)?\n"
            "2️⃣ Berapa lama proses produksi?\n"
            "3️⃣ Apakah bisa uji rasa dulu sebelum produksi massal?\n"
            "4️⃣ Siapa yang urus izin BPOM & Halal?\n"
            "5️⃣ Berapa biaya pengemasan & desain?\n"
            "\n"
            "Mitra maklon profesional pasti jawab semua dengan jelas.\n"
            "Kalo jawabannya ngambang — hati-hati! ⚠️\n"
            "\n"
            "Mau tau lebih lanjut? Tinggal chat aja! 💬😊\n"
            "\n"
            "#YasmaNatura #TipsMaklon #BisnisMinuman"
        ),
        (
            "Tim R&D itu aset terpenting di pabrik maklon. 🧪🔬\n"
            "\n"
            "Kenapa? Karena mereka yang:\n"
            "✅ Bikin formula sesuai keinginan kamu\n"
            "✅ Menyesuaikan rasa dengan target pasar\n"
            "✅ Menjamin konsistensi tiap batch produksi\n"
            "✅ Membantu inovasi produk baru\n"
            "\n"
            "Tips: ajak tim R&D diskusi detail — kasih tau target pasar,\n"
            "konsep rasa, bahkan contoh produk yang kamu suka.\n"
            "Makin detail makin bagus hasilnya! 🎯✨\n"
            "\n"
            "#YasmaNatura #R&D #MaklonMinuman"
        ),
    ],
    # Series 5: Rasa & Kualitas
    [
        (
            "Rasa itu RAJA! 👑\n"
            "\n"
            "Apapun kandungan nutrisinya, kalo rasanya gak enak —\n"
            "konsumen gak akan beli lagi. Sederhana.\n"
            "\n"
            "Tips menciptakan rasa yang pas:\n"
            "🔸 Uji rasa (sensory test) ke 10-20 orang target pasar\n"
            "🔸 Minta feedback jujur — jangan defensif\n"
            "🔸 Iterasi — revisi sampai dapat rasa yang pas\n"
            "🔸 Baru produksi massal\n"
            "\n"
            "Merekah terkenal pun sebelum launching bisa bolak-balik\n"
            "revisi rasa puluhan kali — demi hasil yang maksimal! 💪\n"
            "\n"
            "#YasmaNatura #RasaMinuman #KualitasProduk"
        ),
        (
            "Uji rasa (sensory test) — caranya gampang! 😊\n"
            "\n"
            "Langkah:\n"
            "✅ Siapkan 3-5 varian rasa (beri kode A, B, C)\n"
            "✅ Undang 10-20 orang dari target pasar\n"
            "✅ Minta mereka coba & kasih skor 1-10\n"
            "✅ Tanya: mana yang paling enak? Kenapa?\n"
            "\n"
            "Dari situ kamu bisa tau:\n"
            "🔹 Rasa mana yang paling disukai\n"
            "🔹 Mana yang perlu diperbaiki\n"
            "🔹 Apa kata-kata yang mereka pake buat describe produk\n"
            "\n"
            "Data ini emas buat marketing! 📊✨\n"
            "\n"
            "#YasmaNatura #UjiRasa #TipsProduk"
        ),
        (
            "Konsistensi rasa — ini yang bikin brand besar beda dari UKM. 📈\n"
            "\n"
            "Pernah beli produk, batch pertama enak, batch kedua beda? 🙄\n"
            "Itu karena masalah konsistensi produksi.\n"
            "\n"
            "Dengan sistem maklon profesional:\n"
            "✅ Formula terdokumentasi & terstandarisasi\n"
            "✅ Bahan baku dari supplier yang sama\n"
            "✅ Quality control tiap batch\n"
            "\n"
            "Hasilnya: rasa konsisten dari batch ke batch.\n"
            "Konsumen percaya & loyal! 🔥👌\n"
            "\n"
            "#YasmaNatura #KonsistensiRasa #MaklonMinuman"
        ),
    ],
    # Series 6: Digital Marketing
    [
        (
            "Produk udah jadi, sekarang gimana cara jualannya? 🚀\n"
            "\n"
            "Digital marketing untuk brand minuman:\n"
            "✅ Instagram & TikTok — konten visual menarik\n"
            "✅ Shopee / Tokopedia — canal penjualan utama\n"
            "✅ Influencer — review & endorsement\n"
            "✅ Content marketing — blog tentang manfaat produk\n"
            "\n"
            "Tips: jangan cuma jualan! Beri value:\n"
            "👉 Resep kreasi minuman\n"
            "👉 Tips hidup sehat\n"
            "👉 Behind the scene produksi\n"
            "\n"
            "Konten edukatif = trust. Trust = sale! 🎯😊\n"
            "\n"
            "#YasmaNatura #DigitalMarketing #TipsJualan"
        ),
        (
            "Konten yang lagi viral di F&B 2026 🔥\n"
            "\n"
            "1️⃣ Review jujur — taste test by random people\n"
            "2️⃣ Behind the scene — proses produksi dari maklon\n"
            "3️⃣ Tutorial mix — minuman ini cocok dicampur apa?\n"
            "4️⃣ Testimoni pelanggan — real people, real result\n"
            "5️⃣ Packaging reveal — unboxing kemasan baru\n"
            "\n"
            "Kuncinya: AUTHENTIC. Jangan terlalu di-script,\n"
            "jangan terlalu sempurna. Yang natural lebih dipercaya!\n"
            "\n"
            "Mau dibantu strategi kontennya? 😎📱\n"
            "\n"
            "#YasmaNatura #KontenViral #SocialMedia"
        ),
        (
            "Influencer marketing buat brand minuman — ini caranya! 🤝\n"
            "\n"
            "Pilih influencer yang:\n"
            "🔸 Relevan — niche makanan/minuman/kesehatan\n"
            "🔸 Engagement tinggi — bukan cuma follower doang\n"
            "🔸 Mikro (10-50k followers) — lebih murah & lebih autentik\n"
            "\n"
            "Caranya:\n"
            "✅ Kirim sample produk ke 5-10 micro influencer\n"
            "✅ Minta review jujur — gak perlu di-script\n"
            "✅ Share ulang ke akun brand\n"
            "\n"
            "Hasilnya? Brand awareness naik, sales ikut naik! 🚀💪\n"
            "\n"
            "#YasmaNatura #InfluencerMarketing #BrandMinuman"
        ),
    ],
    # Series 7: Legalitas Produk
    [
        (
            "Banyak brand gagal karena abaikan legalitas. Jangan sampe! 😱\n"
            "\n"
            "Izin yang wajib dipunya produk minuman:\n"
            "✅ BPOM — izin edar produk\n"
            "✅ Sertifikat Halal MUI\n"
            "✅ NIB — nomor induk berusaha\n"
            "\n"
            "Kalo gak punya:\n"
            "❌ Produk bisa ditarik dari pasaran\n"
            "❌ Kena denda & sanksi pidana\n"
            "❌ Reputasi brand hancur\n"
            "\n"
            "Untungnya, pabrik maklon profesional biasanya bantu\n"
            "urus semua izin ini! Tinggal tanda tangan. 📋😊\n"
            "\n"
            "#YasmaNatura #LegalitasProduk #BPOM"
        ),
        (
            "Proses izin BPOM itu gak serumit yang dibayangkan! 🏛️\n"
            "\n"
            "Langkah-langkah:\n"
            "1️⃣ Pendaftaran akun — via notifikasi.go.id\n"
            "2️⃣ Upload dokumen perusahaan\n"
            "3️⃣ Upload komposisi & label produk\n"
            "4️⃣ Verifikasi — biasanya 14-30 hari\n"
            "5️⃣ Izin terbit!\n"
            "\n"
            "Tips: pastikan semua dokumen lengkap biar gak bolak-balik.\n"
            "Pabrik maklon biasanya udah punya pengalaman urus ini.\n"
            "\n"
            "Produk ber-BPOM = konsumen lebih percaya! ✅✨\n"
            "\n"
            "#YasmaNatura #BPOM #IzinEdar"
        ),
        (
            "Sertifikat Halal — penting banget buat produk minuman! ☪️✅\n"
            "\n"
            "Apalagi di Indonesia dengan mayoritas muslim.\n"
            "\n"
            "Fakta:\n"
            "🔹 Sertifikat Halal sekarang WAJIB untuk semua produk\n"
            "🔹 Proses via BPJPH & MUI\n"
            "🔹 Berlaku 4 tahun, bisa diperpanjang\n"
            "\n"
            "Manfaat:\n"
            "✅ Pasar lebih luas — semua kalangan bisa beli\n"
            "✅ Trust konsumen meningkat\n"
            "✅ Wajib buat dapat izin edar resmi\n"
            "\n"
            "Pabrik maklon biasanya fasilitasi dari A sampai Z.\n"
            "Jangan khawatir! 👍😊\n"
            "\n"
            "#YasmaNatura #SertifikatHalal #MUI"
        ),
    ],
    # Series 8: Sukses Bersama Maklon
    [
        (
            "Brand minuman sukses yang lahir dari sistem maklon — banyak banget! 🌟\n"
            "\n"
            "Apa rahasia mereka?\n"
            "🔸 Produk unik — gak pasaran, ada ciri khas\n"
            "🔸 Kemasan estetik — instagramable & beda\n"
            "🔸 Marketing kreatif — konten engaging & konsisten\n"
            "🔸 Kualitas terjaga — ganti mitra maklon? No way\n"
            "\n"
            "Mimpi punya brand minuman sendiri bukan hal mustahil.\n"
            "Banyak yang mulai dari modal kecil, sekarang jadi brand besar.\n"
            "\n"
            "Giliran kamu sekarang! 🚀💪😊\n"
            "\n"
            "#YasmaNatura #SuksesBisnis #MaklonMinuman"
        ),
        (
            "Motivasi buat kamu yang masih ragu mulai bisnis minuman: 🔥\n"
            "\n"
            "Masalah yang paling sering muncul:\n"
            "\"Aku gak punya modal besar...\"\n"
            "→ Maklon solusinya! Mulai dari ratusan pcs aja.\n"
            "\n"
            "\"Aku gak ngerti produksi...\"\n"
            "→ Tim R&D & produksi urus semua. Kamu tinggal jualan.\n"
            "\n"
            "\"Takut gagal...\"\n"
            "→ Semua pengusaha sukses pernah gagal. Yang penting mulai!\n"
            "\n"
            "Setiap brand besar berawal dari langkah pertama.\n"
            "Sekarang waktunya kamu melangkah! 👣🚀\n"
            "\n"
            "#YasmaNatura #MotivasiBisnis #Maklon"
        ),
        (
            "Siap bikin brand minuman sendiri? Ini roadmap-nya! 🗺️\n"
            "\n"
            "1️⃣ Tentukan produk & target pasar\n"
            "2️⃣ Bangun brand identity (nama, logo, kemasan)\n"
            "3️⃣ Pilih mitra maklon terpercaya\n"
            "4️⃣ Kembangkan formula & uji rasa\n"
            "5️⃣ Urus legalitas (BPOM, Halal)\n"
            "6️⃣ Produksi & distribusi\n"
            "7️⃣ Marketing & jualan\n"
            "\n"
            "Konsultasi gratis — tinggal chat aja!\n"
            "Dari mimpi jadi kenyataan, mulai sekarang! 💬✨\n"
            "\n"
            "#YasmaNatura #RoadmapBisnis #Wirausaha"
        ),
    ],
]


def enforce_max_chars(text, maxlen=500):
    """VALIDASI KETAT (FIXED 5 Agustus 2026): teks harus <= maxlen & semua link nyala.
    Kalau tidak lolos -> return None (JANGAN dipotong, JANGAN dikirim)."""
    try:
        return cek_teks_threads(text, label="Caption Threads", maxlen=maxlen)
    except ThreadsTextError as e:
        print(f"  SKIP: {e}")
        return None



def load_state():
    if not os.path.exists(STATE_FILE):
        return {"last_series": -1}
    with open(STATE_FILE) as f:
        return json.load(f)


def save_state(state):
    with open(STATE_FILE, "w") as f:
        json.dump(state, f)


def log_result(series_idx, date_str, ids):
    entry = f"Yasma | Series {series_idx+1} | {date_str} | IDs: {', '.join(ids)}\n"
    with open(LOG_FILE, "a") as f:
        f.write(entry)


def schedule(text, scheduleAt_iso, parentId=None):
    text = enforce_max_chars(text)
    if text is None:
        return None
    payload = {
        'title': '', 'description': text, 'topic': 'Bisnis', 'type': 'text',
        'medias': [], 'meta': {'title': '', 'description': '', 'url': ''},
        'additionalInfo': {
            'isAiGenerated': False, 'isDraft': False,
            'collaborators': [], 'mentions': [],
            'music': {'id': '', 'artist': '', 'name': '', 'thumbnail': ''},
            'products': [], 'tags': []
        },
        'replies': [], 'accountId': ACCOUNT["id"], 'scheduleAt': scheduleAt_iso,
    }
    if parentId:
        payload['replies'] = [parentId]

    body = json.dumps(payload).encode()
    req = urllib.request.Request(f'{BASE}/public/schedule', data=body, headers=HEADERS, method='POST')
    try:
        with urllib.request.urlopen(req) as r:
            result = json.loads(r.read())
            sid = result.get('scheduleId', '?')
            print(f'  ✅ {sid}')
            return sid
    except urllib.error.HTTPError as e:
        err = e.read().decode()
        print(f'  ❌ ERROR {e.code}: {err[:200]}')
        return None


def main():
    print('🥤 Yasma Natura — Daily Scheduler')
    print('=' * 50)

    state = load_state()
    last_series = state.get("last_series", -1)
    next_series = (last_series + 1) % len(CONTENT_SERIES)
    series = CONTENT_SERIES[next_series]

    today = datetime.now(WIB).date()
    slots = [
        f'{today.isoformat()}T17:00:00+07:00',
        f'{today.isoformat()}T20:00:00+07:00',
        f'{today.isoformat()}T23:00:00+07:00',
    ]

    titles = [
        "Apa itu Maklon",
        "Tips Pilih Produk",
        "Brand Identity",
        "Pilih Mitra Maklon",
        "Rasa & Kualitas",
        "Digital Marketing",
        "Legalitas Produk",
        "Sukses Bersama Maklon"
    ]

    print(f'\n📅 {today.isoformat()}')
    series_title = titles[next_series] if next_series < len(titles) else "Tips Bisnis"
    print(f'📋 Series {next_series + 1} of {len(CONTENT_SERIES)}: {series_title}')
    print()

    ids = []
    prev = None
    for i, (post, slot) in enumerate(zip(series, slots)):
        print(f'  Post {i+1} ({slot[11:16]} WIB):')
        sid = schedule(post, slot, parentId=prev)
        if sid:
            ids.append(sid)
            prev = sid
        else:
            print(f'    ❌ Gagal di post {i+1}')
            break

    if len(ids) == 3:
        print(f'\n{"="*50}')
        print('✅ Yasma Natura SUCCESS!')
        for i, sid in enumerate(ids):
            print(f'  {slots[i][11:16]} WIB → ID: {sid}')
        log_result(next_series, str(today), ids)
        state["last_series"] = next_series
        save_state(state)

        # Catat di memory
        note = f"Yasma Natura Threads | {today} Series {next_series+1}: {series_title}"
        with open(LOG_FILE, "a") as f:
            f.write(f"  📌 {note}\n")


if __name__ == "__main__":
    main()

