#!/usr/bin/env python3
"""Schedule diskusi berantai 7 akun Threads — tiap akun jawab + tanya + mention.
Rantai A: "Kunci pelanggan balik lagi" — mulai 23:00 WIB 2 Agu
Rantai B: "Kesalahan pelanggan paling umum" — mulai 23:00 WIB 3 Agu
"""
import sys, json
from datetime import datetime, timezone, timedelta
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client, ACC

client = get_client()

ACC_MAP = {
    "uky": ACC.UKY_THREADS,
    "studiosoft": ACC.STUDIOSOFT_THREADS,
    # LEIT DIKELUARKAN 28 Agu 2026 (instruksi Bos): TIDAK ada mention dari akun kita
    # ke Threads LEIT (@leitsurabaya) — jangan dimasukkan lagi ke mesin mention/diskusi.
    "tslaw": ACC.TSLAW_THREADS,
    "tsc": ACC.TSC_THREADS,
    "das": ACC.DAS_THREADS,
    "everybe": "6a44ed1920e4f4f195d8ecf7",
}

def enforce_max(text, maxlen=500):
    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 slot_wib(dt_wib):
    """Convert WIB datetime to UTC ISO."""
    dt_utc = dt_wib - timedelta(hours=7)
    return dt_utc.strftime("%Y-%m-%dT%H:%M:%S.000Z")

def schedule_one(acc_key, text, schedule_at, reply_to=None, idx=0):
    acc = ACC_MAP[acc_key]
    text = enforce_max(text)
    print(f"   [len={len(text)}] {acc_key} @ {schedule_at}")
    if reply_to:
        r = client.create_schedule(acc, text, schedule_at, title="Diskusi", replies=[reply_to])
    else:
        r = client.schedule_text(acc, text, schedule_at, title="Diskusi")
    sid = r.get("scheduleId", "?")
    print(f"   ✅ {sid}")
    return sid

def run_chain(chain, start_wib):
    print(f"\n📅 {chain['name']} — mulai {start_wib.strftime('%Y-%m-%d %H:%M WIB')}")
    print("=" * 55)
    last_sid = None
    slots = chain.get("slots", [])
    day_offset = 0
    prev_hour = None
    for i, item in enumerate(chain["posts"]):
        acc_key = item["account"]
        text = item["text"]
        slot_str = slots[i] if i < len(slots) else None
        if slot_str:
            hh, mm = [int(x) for x in slot_str.split(":")]
            # kalo jam lebih kecil dari jam sebelumnya → hari berikutnya
            if prev_hour is not None and hh < prev_hour:
                day_offset += 1
            t = start_wib + timedelta(days=day_offset)
            t = t.replace(hour=hh, minute=mm, second=0, microsecond=0)
            prev_hour = hh
        else:
            t = start_wib + timedelta(days=day_offset, hours=3 * i)
        sched_at = slot_wib(t)
        print(f"{t.strftime('%d %b %H:%M WIB')} {acc_key}...")
        last_sid = schedule_one(acc_key, text, sched_at, reply_to=last_sid if i > 0 else None, idx=i)
        if not last_sid:
            print("   ❌ Gagal, stop chain ini.")
            return False
    print(f"✅ Chain selesai: {len(chain['posts'])} post")
    return True

def main():
    chains_file = sys.argv[1] if len(sys.argv) > 1 else "diskusi_7akun_content.json"
    with open(chains_file) as f:
        data = json.load(f)
    for chain in data["chains"]:
        start = datetime.fromisoformat(chain["start_wib"])
        run_chain(chain, start)

if __name__ == "__main__":
    main()
