#!/usr/bin/env python3
"""
Schedule Threads DAS — konten dari artikel website dasindonesia.com (2 Agustus 2026).
Nested 3 post: 20:00 & 23:00 WIB hari ini + 05:00 WIB besok.
Artikel dipilih yang BELUM dipakai di FB/Threads (cek riwayat).
"""
import json, urllib.request, sys, os
from datetime import datetime, timezone, timedelta

from repliz_client import HEADERS, BASE, ACCOUNTS
ACCOUNT_ID = ACCOUNTS['das_ig']  # DAS Threads

LOG_FILE = "/home/mantapman/.hermes/profiles/atun/workspace/threads_log.txt"
WIB = timezone(timedelta(hours=7))

POSTS = [
    {
        "slot": "2026-08-02T20:00:00+07:00",
        "text": (
            "Mobil bekas itu bukan masalah — yang masalah kalau servisnya asal-asalan.\n"
            "\n"
            "Banyak pemilik mobil bekas baru sadar setelah muncul bunyi aneh: oli ngedrop,\n"
            "tarikan berat, mesin mulai brebet. Padahal kalau servis berkala dijalanin\n"
            "dengan benar sejak awal, sebagian besar masalah itu bisa dicegah.\n"
            "\n"
            "Kalau riwayat servisnya nggak ada catatannya, mulai dari nol: ganti oli,\n"
            "cek coolant, cek kampas rem, cek timing belt, dan periksa kondisi mesin\n"
            "secara menyeluruh.\n"
            "\n"
            "Panduan lengkap servis berkala mobil bekas biar awet ada di artikel ini 👇\n"
            "https://dasindonesia.com/servis-berkala-nissan-untuk-mobil-bekas-panduan-wajib-agar-awet/\n"
            "\n"
            "#DASBengkelIndonesia #ServisBerkala #MobilBekas"
        ),
    },
    {
        "slot": "2026-08-02T23:00:00+07:00",
        "text": (
            "Lanjut soal perawatan — kalau mesin mulai kasih sinyal, jangan ditunda.\n"
            "\n"
            "Beberapa gejala yang sering dianggap sepele padahal awal dari masalah besar:\n"
            "mesin brebet saat idle, oli cepat berkurang, asap knalpot kebiruan, tenaga turun drastis.\n"
            "\n"
            "Kalau dibiarkan, ujung-ujungnya overhaul yang biayanya jauh lebih mahal.\n"
            "Dicek lebih awal, perbaikannya juga lebih ringan.\n"
            "\n"
            "Checklist lengkap gejala mesin yang butuh overhaul ada di sini 👇\n"
            "https://dasindonesia.com/gejala-mesin-honda-perlu-overhaul-checklist-lengkap-sebelum-terlambat/\n"
            "\n"
            "#DASBengkelIndonesia #GejalaMesin #OverhaulMesin"
        ),
    },
    {
        "slot": "2026-08-03T05:00:00+07:00",
        "text": (
            "Dan buat pemilik mobil premium seperti Alphard, kewaspadaan yang sama berlaku.\n"
            "\n"
            "Mesin premium justru butuh perhatian lebih karena komponennya lebih kompleks.\n"
            "Masalah yang sering muncul: getaran berlebih, oli merembes, transmisi terasa\n"
            "selip, sampai overheat.\n"
            "\n"
            "Kuncinya: kenali gejalanya sejak dini, biar penanganannya tepat dan biayanya\n"
            "terkontrol.\n"
            "\n"
            "7 masalah umum mesin Alphard dan cara mengatasinya ada di artikel ini 👇\n"
            "https://dasindonesia.com/7-masalah-umum-mesin-alphard-dan-cara-mengatasinya/\n"
            "\n"
            "#DASBengkelIndonesia #Alphard #PerawatanMobilPremium"
        ),
    },
]

def enforce_max_chars(text, maxlen=500):
    """Potong teks biar ≤ maxlen karakter. Simpan hashtag."""
    if len(text) <= maxlen:
        return text
    lines = text.split('\n')
    hashtags = ''
    body_lines = []
    for line in lines:
        if line.startswith('#') and not hashtags:
            hashtags = line
        else:
            body_lines.append(line)
    body = '\n'.join(body_lines)
    max_body = maxlen - len(hashtags) - 1
    if max_body < 50:
        return text[:maxlen]
    body = body[:max_body].rstrip()
    return body + '\n' + hashtags

def schedule(text, scheduleAt_iso, parentId=None):
    text = enforce_max_chars(text)
    print(f"[len={len(text)}] {text[:60]}...")
    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, timeout=40) 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
    except Exception as e:
        print(f"  ❌ ERROR: {type(e).__name__}: {e}")
        return None

def main():
    print("🚗 DAS Threads — Artikel dasindonesia.com (2 Agustus 2026)")
    print("=" * 50)
    ids = []
    prev_sid = None
    for i, p in enumerate(POSTS):
        print(f"📌 POST {i+1} ({p['slot']}):")
        sid = schedule(p["text"], p["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) == len(POSTS):
        print("=" * 50)
        print("✅ SEMUA TERJADWAL!")
        for i, sid in enumerate(ids):
            print(f"   {POSTS[i]['slot']} → Post {i+1} — ID: {sid}")
        print("=" * 50)
        entry = f"DAS | Artikel (Nissan Bekas/Honda Overhaul/Alphard) | {datetime.now(WIB).date().isoformat()} | IDs: {', '.join(ids)}\n"
        with open(LOG_FILE, "a") as f:
            f.write(entry)
        print(f"📝 Logged: {entry.strip()}")
    else:
        print("\n❌ Ada yang gagal. Cek log di atas.")

if __name__ == "__main__":
    main()
