#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Lihat jadwal Repliz akun TS Law (IG/Threads/FB) pada rentang tanggal tertentu.

Pakai: /usr/bin/python3 cek_jadwal_tslaw.py [YYYY-MM-DD] [YYYY-MM-DD]
"""
import json
import sys
import urllib.parse
import urllib.request
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE  # noqa: E402

ACC = {
    "6a76a54d62caae1e04f30968": "IG",
    "6a35f8b7c5ff4ce3a322b2ed": "Threads",
    "6a3b41d1c5ff4ce3a32753e8": "FB",
    "6a60101562caae1e04e901ac": "LinkedIn",
}


def semua():
    docs, page = [], 1
    while True:
        q = urllib.parse.urlencode({"page": page, "limit": 100})
        req = urllib.request.Request(f"{BASE}/public/schedule?{q}", headers=HEADERS)
        with urllib.request.urlopen(req, timeout=60) as r:
            d = json.load(r)
        docs += d.get("docs", d.get("data", []))
        if not d.get("hasNextPage") or not docs:
            break
        page += 1
    return docs


mulai = sys.argv[1] if len(sys.argv) > 1 else "2026-10-15"
akhir = sys.argv[2] if len(sys.argv) > 2 else "2026-10-18"
lo = datetime.fromisoformat(mulai + "T00:00:00+07:00").astimezone(timezone.utc)
hi = datetime.fromisoformat(akhir + "T23:59:59+07:00").astimezone(timezone.utc)

rows = []
for s in semua():
    titik = s.get("scheduleAt") or s.get("createdAt") or ""
    try:
        t = datetime.fromisoformat(titik.replace("Z", "+00:00"))
        if t.tzinfo is None:
            t = t.replace(tzinfo=timezone.utc)
    except Exception:
        continue
    if not (lo <= t <= hi):
        continue
    if s.get("accountId") not in ACC:
        continue
    rows.append((t, ACC[s["accountId"]], s))

rows.sort(key=lambda x: x[0])
print(f"== Jadwal TS Law {mulai} s/d {akhir} (WIB) — {len(rows)} item ==")
for t, acc, s in rows:
    sid = s.get("_id") or s.get("id")
    med = (s.get("medias") or [{}])[0]
    fn = (med.get("url") or "").split("/")[-1] or "-"
    desc = (s.get("description") or "").replace("\n", " ")[:70]
    print(f"{t.astimezone(timezone(timedelta(hours=7))).strftime('%d %b %H:%M')} WIB | {acc:7s} | "
          f"{str(s.get('type')):6s} | {str(s.get('status') or s.get('state')):8s} | {sid} | {fn}")
    print(f"        {desc}")
