#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""probe_uky_fotografi.py — cek slot Threads @ukyhandoko + riwayat VIDEO di Threads
+ jejak konten fotografi di caption uky. Read-only."""
import json, sys, datetime, collections
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC, ACCOUNTS

WIB = datetime.timezone(datetime.timedelta(hours=7))
cli = ReplizClient()

all_s = []
page = 1
while True:
    d = cli.get(f"/public/schedule?page={page}&limit=100")
    docs = d.get("docs") or d.get("result") or []
    all_s.extend(docs)
    if page >= (d.get("totalPages") or 1):
        break
    page += 1
json.dump(all_s, open("/tmp/probe_uky_fotografi_dump.json", "w"), indent=1)
print(f"total jadwal: {len(all_s)}")

def wib(iso):
    if not iso: return None
    dt = datetime.datetime.fromisoformat(iso.replace("Z", "+00:00"))
    return dt.astimezone(WIB)

now = datetime.datetime.now(WIB)
# ── 1. jadwal @ukyhandoko Threads ──
uky = [s for s in all_s if s.get("accountId") == ACC.UKY_THREADS]
uky_sorted = sorted(uky, key=lambda s: s.get("scheduleAt") or "")
print(f"\n=== UKY THREADS: {len(uky)} jadwal ===")
by_status = collections.Counter(s.get("status") for s in uky)
print("status:", dict(by_status))

upcoming = [s for s in uky_sorted if (s.get("scheduleAt") or "") >= now.astimezone(datetime.timezone.utc).isoformat()]
print(f"\n-- 20 jadwal terdekat --")
for s in uky_sorted:
    dt = wib(s.get("scheduleAt"))
    if dt and dt >= now:
        med = ",".join(m.get("type","?") for m in (s.get("medias") or [])) or "text"
        u = (s.get("medias") or [{}])[0].get("url","") if s.get("medias") else ""
        print(f"  {dt:%d %b %H:%M} {s.get('status'):8} {s.get('type','?'):7} media={med:12} {s.get('topic','')[:22]:22} | {s.get('title','')[:40]}")
        
# slot grid kosong 14 hari
grid = [5,8,11,14,17,20,23]
print("\n-- grid 7-slot uky threads (K=kosong) --")
for i in range(14):
    day = (now + datetime.timedelta(days=i)).date()
    slots = {}
    for s in uky:
        dt = wib(s.get("scheduleAt"))
        if dt and dt.date() == day and s.get("status") in ("pending","processing","draft"):
            slots.setdefault(dt.hour, []).append(s)
    row = " ".join(f"{h:02d}:{'K' if h not in slots else 'X'}" for h in grid)
    print(f"  {day}  {row}   terisi={[ (h, [x.get('title','')[:20] for x in v]) for h,v in sorted(slots.items())]}")

# ── 2. riwayat VIDEO di semua akun Threads ──
threads_ids = {v: k for k, v in ACCOUNTS.items() if "threads" in k}
print("\n=== jadwal VIDEO di akun Threads (semua status) ===")
for s in all_s:
    acc = s.get("accountId")
    if acc in threads_ids:
        meds = s.get("medias") or []
        if any(m.get("type") == "video" for m in meds) or s.get("type") in ("video","reel"):
            dt = wib(s.get("scheduleAt"))
            print(f"  {threads_ids[acc]:18} {dt:%d %b %H:%M} {s.get('status'):8} {s.get('type'):6} {s.get('title','')[:35]} | err={(s.get('errorMessage') or '')[:60]}")

# ── 3. jejak konten fotografi di caption uky threads ──
print("\n=== caption uky threads yang menyebut foto/kamera/fotografi ===")
kws = ["foto", "kamera", "fotografi", "lensa", "jepret", "visual", "shoot"]
n = 0
for s in uky_sorted:
    desc = (s.get("description") or "").lower()
    hit = [k for k in kws if k in desc]
    if hit:
        n += 1
        dt = wib(s.get("scheduleAt"))
        print(f"  {dt:%d %b %Y %H:%M} {s.get('status'):8} {hit} | {s.get('title','')[:45]}")
print(f"  -> {n} jadwal")
