#!/usr/bin/env python3
"""
DAS Threads Scheduler — cron job harian.
Jalan tiap hari jam 05:00 WIB, post nested 3 thread di slot 17:00/20:00/23:00 WIB.
Konten bergilir biar gak duplikasi.
"""
import json, urllib.request, sys, os
from datetime import datetime, timezone, timedelta

from repliz_client import HEADERS, BASE, ACCOUNTS
from threads_text_check import cek_teks_threads, ThreadsTextError
from diskusi_engine import tambahkan_diskusi  # pancingan diskusi (FIXED 7 Agt 2026)
ACCOUNT_ID = ACCOUNTS['das_ig']  # DAS Threads

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

WIB = timezone(timedelta(hours=7))

# === BANK KONTEN DAS ===
CONTENT_SERIES = [
    # Series 1: AC Mobil
    [
        (
            "AC mobil mulai kurang dingin? Jangan buru-buru ganti kompresor dulu. 😅\n"
            "\n"
            "Banyak kasus, AC mobil terasa panas cuma karena:\n"
            "\n"
            "🔹 Filter kabin kotor — ini yang paling sering, perawatannya gampang banget\n"
            "🔹 Freon bocor — ada celah di selang, ditambal bukan diganti\n"
            "🔹 Kondensor kotor — kena debu dan kotoran jalanan\n"
            "\n"
            "Saran mekanik DAS: cek filter kabin dulu. 7 dari 10 kasus AC kurang dingin\n"
            "selesai cuma dengan bersihin atau ganti filter. Biayanya jauh di bawah ganti kompresor.\n"
            "\n"
            "Pernah ngalamin AC mobil tiba-tiba panas? Share ceritanya 👇\n"
            "\n"
            "#DASBengkelIndonesia #ACmobil #TipsBengkel"
        ),
        (
            "Satu lagi soal AC mobil — ini yang suka bikin orang terkecoh.\n"
            "\n"
            "Bunyi mendesis dari AC? Tenang, bisa jadi itu cuma suara freon bersirkulasi — normal kok.\n"
            "\n"
            "Tapi waspada kalo:\n"
            "🔸 Bau apek — evaporator lembab, jarang pake fresh air mode\n"
            "🔸 Bunyi kasar — kompresor mulai bermasalah, jangan ditunda\n"
            "🔸 AC mati total — overload relay atau kompresor ngadat\n"
            "\n"
            "Mau servis AC mobil tanpa khawatir ditipu? Langsung ke DAS Bengkel Indonesia.\n"
            "Mekanik profesional, biaya transparan! 🚗💨\n"
            "\n"
            "Booking — tinggal chat aja!\n"
            "\n"
            "#DASBengkelIndonesia #ACmobil #ServisMobil"
        ),
        (
            "Oke dari AC kita lanjut ke ban. 🛞\n"
            "\n"
            "Ban satu-satunya bagian mobil yang langsung nyentuh aspal. Kalo kondisinya jelek,\n"
            "secanggih apapun mobilnya — tetap berbahaya.\n"
            "\n"
            "Cek 3 hal sebelum jalan jauh:\n"
            "✅ Kedalaman alur — di bawah 1.6 mm, ganti sekarang\n"
            "✅ Tekanan angin — pake tire gauge, jangan ngandelin mata\n"
            "✅ Umur ban — di atas 4 tahun udah getas karetnya\n"
            "\n"
            "Bonus: rotasi ban tiap 10.000 km biar keausan merata. DAS siap bantu! 🔧😊\n"
            "\n"
            "#DASBengkelIndonesia #TipsBan #SafetyDriving"
        ),
    ],
    # Series 2: Oli & Mesin
    [
        (
            "Oli mesin itu kayak darah buat mobil. Kalo kotor atau kurang, siap-siap boncos. 🩸🚗\n"
            "\n"
            "Tanda oli udah waktunya ganti:\n"
            "🔸 Warna udah item pekat kaya kopi tubruk\n"
            "🔸 Volume berkurang (cek pake dipstick)\n"
            "🔸 Mesin terasa lebih berat dan berisik\n"
            "\n"
            "Jarak ideal: 5.000 km buat oli mineral, 10.000 km buat sintetik.\n"
            "Jangan dipaksain — ganti oli murah daripada turun mesin mahal.\n"
            "\n"
            "Kapan terakhir kamu ganti oli?\n"
            "\n"
            "#DASBengkelIndonesia #OliMesin #PerawatanMobil"
        ),
        (
            "Ngikutin posting sebelumnya — ternyata banyak yang nanya:\n"
            "\"Mending ganti oli di bengkel resmi atau bengkel umum?\"\n"
            "\n"
            "Jawabannya: tergantung.\n"
            "\n"
            "🏪 Bengkel resmi: lebih mahal, tapi standar pabrik dan garansi aman\n"
            "🔧 Bengkel umum: lebih miring, asal pilih yang terpercaya\n"
            "\n"
            "Yang penting:\n"
            "✅ Oli original/grade sesuai spek mobil\n"
            "✅ Ganti filter oli juga — jangan cuma olinya doang\n"
            "✅ Catat riwayat servis biar gak lupa jadwal\n"
            "\n"
            "Di DAS, semua standar. Mau resmi ataupun umum, kami pake oli sesuai rekomendasi pabrik.\n"
            "\n"
            "Mau konsul dulu? Chat aja! 😊\n"
            "\n"
            "#DASBengkelIndonesia #GantiOli #BengkelMobil"
        ),
        (
            "Satu lagi soal mesin yang sering dilupain: filter udara. 🌬️\n"
            "\n"
            "Iya, filter udara. Benda kecil yang perannya gede banget.\n"
            "\n"
            "Filter udara kotor bikin:\n"
            "❌ Tarikan mesin berat\n"
            "❌ Konsumsi bensin boros\n"
            "❌ Performa drop drastis\n"
            "\n"
            "Cek tiap 10.000 km atau kalo sering lewat debu/ jalan tanah — lebih sering.\n"
            "Ganti filter udara itu murah. Efeknya ke performa — gila-gilaan.\n"
            "\n"
            "Pernah ngerasain mobil ngadat pas nanjak? Bisa jadi filter udaranya mampet! 😅\n"
            "\n"
            "#DASBengkelIndonesia #FilterUdara #TipsMobil"
        ),
    ],
    # Series 3: Rem
    [
        (
            "Rem — komponen yang kalo udah bermasalah, langsung terasa. 🛑\n"
            "\n"
            "Tanda kampas rem udah mau habis:\n"
            "🔸 Bunyi decitan kalo ngerem (indikator keausan)\n"
            "🔸 Rem terasa lebih dalam / blong\n"
            "🔸 Getaran di setir waktu ngerem\n"
            "\n"
            "Jangan nunggu bunyi dulu baru ganti. Cek rutin tiap 10.000 km.\n"
            "Kampas rem murah. Cakram rem? Mahal. Lebih baik cegah.\n"
            "\n"
            "DAS siap bantu cek kondisi rem kamu — gratis konsultasi. 🔧😊\n"
            "\n"
            "#DASBengkelIndonesia #SistemRem #SafetyFirst"
        ),
        (
            "Soal rem, ada pertanyaan yang suka muncul:\n"
            "\"Kampas rem original vs aftermarket, mending mana?\"\n"
            "\n"
            "Gini:\n"
            "✅ Original — lebih awet, lebih halus, tapi lebih mahal\n"
            "✅ Aftermarket kualitas bagus — harga lebih miring, pilih brand terkenal\n"
            "\n"
            "Yang harus dihindari: aftermarket murahan yang gak jelas. Bisa bikin cakram\n"
            "cepat aus dan rem gak pakem.\n"
            "\n"
            "Mau konsul milih kampas rem yang pas? DAS bantu rekomendasiin — sesuai mobil\n"
            "dan budget kamu! 🚗💨\n"
            "\n"
            "#DASBengkelIndonesia #TipsRem #SparepartMobil"
        ),
        (
            "Selain kampas rem, ada 1 hal yang sering terlewat: minyak rem. 🧪\n"
            "\n"
            "Minyak rem itu higroskopis — gampang nyerap air dari udara.\n"
            "\n"
            "Akibatnya:\n"
            "❌ Titik didih turun — rem bisa blong kalo dipake keras\n"
            "❌ Korosi di komponen rem\n"
            "❌ Sistem rem jadi lembek\n"
            "\n"
            "Ganti minyak rem tiap 2 tahun atau 40.000 km. Murah, tapi efeknya ke safety luar biasa.\n"
            "\n"
            "Jangan nunggu rem blong baru sadar. Mampir ke DAS, kami cek gratis! 😊\n"
            "\n"
            "#DASBengkelIndonesia #MinyakRem #SafetyMobil"
        ),
    ],
    # Series 4: Ban
    [
        (
            "Ban mobil kempes sebelah? Jangan cuma ditambal. Bisa jadi ada masalah lain. 🛞\n"
            "\n"
            "Penyebab ban sering kempes:\n"
            "🔸 Bocor halus — kena paku atau benda tajam\n"
            "🔸 Pentil bocor — karet pentil udah getas\n"
            "🔸 Velg retak atau penyok\n"
            "\n"
            "Tips: kalo ban bocor, minta cek di bak air — keliatan gelembungnya.\n"
            "Jangan cuma andelin liat dari luar aja.\n"
            "\n"
            "DAS punya alat cek kebocoran ban lengkap. Gratis konsultasi! 🔧😊\n"
            "\n"
            "#DASBengkelIndonesia #BanMobil #TipsBengkel"
        ),
        (
            "Ban mobil kamu udah botak? Coba cek umurnya dulu. 🧐\n"
            "\n"
            "Ban punya masa kadaluarsa — walau masih tebal, karetnya bisa getas.\n"
            "\n"
            "Kode produksi ban ada di dinding ban: DOT XXXXXX 3622\n"
            "Empat angka terakhir = minggu & tahun produksi.\n"
            "Contoh: 3622 = minggu ke-36 tahun 2022.\n"
            "\n"
            "Tips:\n"
            "✅ Ban usia >4 tahun: waspada, sering cek\n"
            "✅ Ban usia >5 tahun: ganti, walau masih kelihatan tebal\n"
            "✅ Ban usia >10 tahun: WAJIB ganti — ini darurat\n"
            "\n"
            "Cek yuk ban kamu produksi kapan? 😊\n"
            "\n"
            "#DASBengkelIndonesia #TipsBan #KeselamatanBerkendara"
        ),
        (
            "Udah tau kode produksi ban? Sekarang soal tekanan angin. 🅿️\n"
            "\n"
            "Banyak yang isi angin ban asal-asalan. Padahal tekanan ban salah efeknya gede.\n"
            "\n"
            "🔹 Terlalu kempes: boros bensin, ban cepat aus di bagian pinggir\n"
            "🔹 Terlalu keras: nyetir gak nyaman, ban aus di bagian tengah\n"
            "\n"
            "Standarnya ada di stiker di pintu sopir atau buku manual. Jangan ikutin\n"
            "kata tetangga — setiap mobil beda speknya.\n"
            "\n"
            "Mampir ke DAS, isi angin ban gratis + cek kondisi ban lengkap! 🚗💨\n"
            "\n"
            "#DASBengkelIndonesia #TekananBan #TipsMobil"
        ),
    ],
    # Series 5: Aki
    [
        (
            "Mobil susah distarter? Bisa jadi akinya soak. 🔋\n"
            "\n"
            "Tanda-tanda aki mau mati:\n"
            "🔸 Starter lemah — bunyi \"crott... crott...\" makin lama makin lambat\n"
            "🔸 Lampu mobil redup — terutama pas distarter\n"
            "🔸 Usia aki >2 tahun — mulai waspada\n"
            "\n"
            "Tips:\n"
            "✅ Cek tegangan aki pake multimeter. 12.4V-12.6V = sehat.\n"
            "✅ Di bawah 12V — tandanya udah lemah.\n"
            "✅ Kalo aki udah >3 tahun, siap-siap ganti.\n"
            "\n"
            "Mogok karena aki mati itu nyebelin. Cegah sebelum kejadian! 😅\n"
            "\n"
            "#DASBengkelIndonesia #AkiMobil #PerawatanMobil"
        ),
        (
            "Milih aki baru itu gak bisa asal. Salah pilih, mobil bisa rewel. ⚡\n"
            "\n"
            "Yang harus diperhatiin:\n"
            "\n"
            "🔹 Kapasitas (Ah) — sesuaikan spek pabrik. Jangan lebih kecil, jangan terlalu besar.\n"
            "🔹 Cold Cranking Amps (CCA) — ini penting buat starter di pagi hari\n"
            "🔹 Tipe aki — basah (konvensional), hybrid, atau kering (maintenance free)\n"
            "🔹 Ukuran fisik — harus pas sama dudukan aki\n"
            "\n"
            "Bingung milih? Di DAS tinggal bilang mobilnya apa, kami cocokin! 🚗🔧\n"
            "\n"
            "Gratis konsultasi — chat aja!\n"
            "\n"
            "#DASBengkelIndonesia #AkiMobil #BengkelMobil"
        ),
        (
            "Tips biar aki mobil awet:\n"
            "\n"
            "1️⃣ Panasin mobil minimal 5 menit kalo jarang dipake — biar aki keisi ulang\n"
            "2️⃣ Matiin semua lampu & AC sebelum matiin mesin — beban starter berkurang\n"
            "3️⃣ Cek terminal aki — kalo berkerak putih, bersihin pake sikat kawat\n"
            "4️⃣ Kalo mobil dipake cuma 1-2x seminggu, cas aki sebulan sekali\n"
            "\n"
            "Aki yang terawat bisa tembus 3-4 tahun. Gak dirawat? 1 tahun udah tekor.\n"
            "\n"
            "Ada tips lain dari Sobat DAS? Share di komen! 😊\n"
            "\n"
            "#DASBengkelIndonesia #TipsAki #PerawatanMobil"
        ),
    ],
]

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"DAS | Series {series_idx+1} | {date_str} | IDs: {', '.join(ids)}\n"
    with open(LOG_FILE, "a") as f:
        f.write(entry)
    print(f"  📝 Logged: {entry.strip()}")

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 schedule(text, scheduleAt_iso, parentId=None):
    text = enforce_max_chars(text)
    if text is None:
        return None
    payload = {
        "title": "",
        "description": text,
        "topic": "Otomotif",
        "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"  ✅ OK → scheduleId: {sid}")
            return sid
    except urllib.error.HTTPError as e:
        err = e.read().decode()
        print(f"  ❌ ERROR {e.code}: {err}")
        return None

def main():
    print("🚗 DAS Bengkel Indonesia — 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()
    date_str = today.isoformat()
    slots = [
        f"{date_str}T17:00:00+07:00",
        f"{date_str}T20:00:00+07:00",
        f"{date_str}T23:00:00+07:00",
    ]

    print(f"\n📋 Series {next_series + 1} of {len(CONTENT_SERIES)}")
    print(f"   Tanggal: {date_str}")
    print()

    ids = []
    prev_sid = None
    for i, (post, slot) in enumerate(zip(series, slots)):
        # Pancingan diskusi di post utama (i==0)
        if i == 0:
            post = tambahkan_diskusi(post, "threads", "otomotif")
        label = f"POST {i+1} ({slot[-12:]})"  # HH:MM:SS+07:00
        print(f"📌 {label}:")
        print(f"    \"{post[:50]}...\"")
        sid = schedule(post, slot, parentId=prev_sid)
        if not sid:
            print(f"\n⚠️ Gagal di post {i+1}. Stop.")
            break
        ids.append(sid)
        prev_sid = sid
        print()

    if len(ids) == 3:
        print(f"{'='*50}")
        print("✅ SEMUA TERJADWAL!")
        for i, sid in enumerate(ids):
            print(f"   {slots[i][-12:]} → Post {i+1} — ID: {sid}")
        print(f"{'='*50}")

        # Update state
        state["last_series"] = next_series
        save_state(state)
        log_result(next_series, date_str, ids)
    else:
        print("\n❌ Ada yang gagal. State gak diupdate biar bisa retry.")

if __name__ == "__main__":
    main()

