#!/usr/bin/env python3
"""Override manual: tslaw 17:00 WIB 19 Okt 2026.

Alasan (preseden 17 Okt 2026): guard `schedule_all_threads.py` menghitung jadwal same-day
09:00 (image "Mitos atau Fakta") sebagai punya own-link karena caption memuat
`https://tslaw.id` (homepage, BUKAN link artikel). Mandat harian "1 post artikel ber-link
website sendiri" tetap harus jalan → dibuat manual di sini, idempoten, lalu dicatat ke
log_threads_harian.json dengan key `threads_override_manual`.

Usage: python3 _jadwal_tslaw_19okt.py [--run]
"""
import json, re, sys
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client, ACC

RUN = "--run" in sys.argv
WIB = timezone(timedelta(hours=7))
DATE = "2026-10-19"
HOUR = 17
LOG = "/home/mantapman/.hermes/profiles/atun/workspace/log_threads_harian.json"
CONTENT = "/home/mantapman/.hermes/profiles/atun/workspace/threads_content_today.json"

item = next(a for a in json.load(open(CONTENT))["accounts"] if a["account"] == "tslaw")
text = item["text"]
assert len(text) <= 500, len(text)
assert "https://www.tslaw.id/" in text
assert not re.search(r"(?<!\S)@\w+", text)

target = datetime.strptime(DATE, "%Y-%m-%d").replace(hour=HOUR, tzinfo=WIB)
at = target.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")

cli = get_client()
docs = []
for p in range(1, 60):
    r = cli.get_schedules(page=p, limit=100)
    b = r.get("docs", [])
    docs += b
    if len(b) < 100:
        break
print("total jadwal:", len(docs))

mine = []
for d in docs:
    if d.get("accountId") != ACC.TSLAW_THREADS or not d.get("scheduleAt"):
        continue
    dt = datetime.fromisoformat(d["scheduleAt"].replace("Z", "+00:00")).astimezone(WIB)
    if dt.strftime("%Y-%m-%d") == DATE and dt.hour == HOUR:
        mine.append(d)

if mine:
    print("SUDAH ADA jadwal di slot itu → SKIP create:", [(m.get("_id"), m.get("status")) for m in mine])
    sid = mine[0].get("_id")
else:
    print(f"{'CREATE' if RUN else 'DRY-RUN'} tslaw {DATE} {HOUR:02d}:00 WIB (UTC {at}) len={len(text)}")
    if not RUN:
        print(text)
        sys.exit(0)
    r = cli.create_schedule(ACC.TSLAW_THREADS, text, at,
                            title=item["title"], topic=item["topic"], replies=[])
    sid = r.get("scheduleId") or r.get("_id") or r.get("id")
    print("create response:", r)

# verifikasi dari API
d = cli.get_schedule(sid)
d = d.get("schedule") or d
desc = d.get("description") or ""
reps = d.get("replies") or []
print(f"verif: id={d.get('_id')} status={d.get('status')} type={d.get('type')} "
      f"at={d.get('scheduleAt')} len={len(desc)} replies={len(reps) if isinstance(reps, list) else '?'} "
      f"topic={d.get('topic')!r}")
print("link ada:", "https://www.tslaw.id/pkwt-vs-pkwtt-panduan-lengkap-kontrak-kerja-karyawan/" in desc)
print("mention:", bool(re.search(r"(?<!\S)@\w+", desc)))

if RUN:
    log = json.load(open(LOG))
    log.setdefault("posts", []).append({
        "date": DATE,
        "threads_override_manual": [{
            "account": "tslaw", "slot": HOUR, "status": d.get("status"),
            "id": d.get("_id"), "scheduleAt": d.get("scheduleAt"),
            "note": "guard skip karena post 09:00 (image Mitos atau Fakta) hanya memuat link homepage "
                    "https://tslaw.id (bukan link artikel); preseden 17 Okt 2026",
        }],
    })
    day_links = log.setdefault("threads_used_links", {}).setdefault(DATE, {})
    day_links.setdefault("tslaw", []).append({
        "url": "https://www.tslaw.id/pkwt-vs-pkwtt-panduan-lengkap-kontrak-kerja-karyawan/",
        "slot": HOUR, "scheduleAt": d.get("scheduleAt"),
    })
    json.dump(log, open(LOG, "w"), indent=2, ensure_ascii=False)
    print("log tercatat:", LOG)
