#!/usr/bin/env python3
"""Verifikasi carousel feed IG SS slot 08:30 WIB 16 Okt 2026 (yang SUDAH terpasang)
+ story mirror 08:40 + survei slot FEED 16-31 Okt (08:30/11:00/19:00).

Read-only. Ringkas <= 25 baris.
"""
import re
import subprocess
import sys
from collections import Counter, defaultdict

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

TGL = "2026-10-16"
PREFIX = f"{TGL}T01:30:00"   # 08:30 WIB
PREFIX_STORY = f"{TGL}T01:40:00"  # 08:40 WIB

cli = ReplizClient()
docs = []
for pg in range(1, 40):
    d = cli.get(f"/public/schedule?status=pending&page={pg}&limit=100")
    dd = d.get("docs") or d.get("data") or []
    docs.extend(dd)
    if pg >= int(d.get("totalPages") or 1) or not dd:
        break

print(f"pending semua akun: {len(docs)}")

hit = [d for d in docs if d.get("accountId") == ACC.STUDIOSOFT_IG
       and str(d.get("scheduleAt", "")).startswith(PREFIX)
       and d.get("type") == "album"]
if not hit:
    print("❌ TIDAK ADA album di slot 08:30 WIB 16 Okt (filter pending)")
    sys.exit(2)

d = hit[0]
med = d.get("medias") or []
desc = d.get("description") or ""
tags = re.findall(r"#(\w+)", desc)
cjk = re.findall(r"[\u3000-\u9fff\uff00-\uffef\uac00-\ud7af]", desc)
mana = re.findall(r"@(ukyhandoko|studiosoft|theskincode|dniclinic|leitsurabaya|everybe)", desc, re.I)
print("ID      :", d.get("_id") or d.get("id"))
print("status  :", d.get("status"), "| type:", d.get("type"), "| when:", d.get("scheduleAt"))
print("title   :", d.get("title"))
print("account :", (d.get("account") or {}).get("name"))
print("media   :", len(med), "|", ", ".join((m.get("url") or "").rsplit("/", 1)[-1] for m in med[:12]))
print("desc_len:", len(desc), "| replies:", len(d.get("replies") or []))
print("link    :", bool(re.search(r"studiosoft\.id", desc)), "| CTA:", bool(re.search(
    r"komentar|diskusi|pendapat|menurut", desc, re.I)))
print("hashtag :", tags, "| lower:", all(t == t.lower() for t in tags), "| jumlah:", len(tags))
print("CJK     :", cjk, "| mention internal:", mana)
print("teks slide 1 (cek warna):", (med[0].get("url") or "").rsplit("/", 1)[-1] if med else "-")

# story mirror 08:40
story = [x for x in docs if x.get("accountId") == ACC.STUDIOSOFT_IG
         and str(x.get("scheduleAt", "")).startswith(PREFIX_STORY)]
print("\nstory 08:40 WIB:", [(x.get("type"), (x.get("medias") or [{}])[0].get("url", "").rsplit("/", 1)[-1])
                            for x in story] or "TIDAK ADA")

# media 200 di dua ingress (hanya 2 sampel: slide 1 & 10)
ips = ["103.84.155.153", "103.84.155.217"]
for m in (med[0], med[-1]) if med else []:
    url = m.get("url")
    codes = []
    for ip in ips:
        p = subprocess.run(["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}", "--max-time", "25",
                            "--resolve", f"mantapserver.tail3947bb.ts.net:443:{ip}", url],
                           capture_output=True, text=True)
        codes.append(p.stdout.strip())
    print("HTTP    :", codes, url.rsplit("/", 1)[-1])

# survei slot feed 16-31 Okt
survei = defaultdict(set)
for x in docs:
    if x.get("accountId") != ACC.STUDIOSOFT_IG:
        continue
    sa = str(x.get("scheduleAt") or "")
    if not ("2026-10-16" <= sa[:10] <= "2026-10-31"):
        continue
    jam = sa[11:16]
    if jam in ("01:30", "04:00", "12:00"):   # 08:30 / 11:00 / 19:00 WIB
        survei[sa[:10]].add({"01:30": "08:30", "04:00": "11:00", "12:00": "19:00"}[jam])
print("\npeta slot feed 16-31 Okt (pending):")
hari_tanpa_19 = [t for t in sorted(survei) if "19:00" not in survei[t]]
print("  hari tanpa jadwal 19:00 :", len(hari_tanpa_19), "dari", len(survei), "hari")
print("  contoh 3 hari pertama   :", [(t, sorted(survei[t])) for t in sorted(survei)[:3]])
