#!/usr/bin/env python3
"""Rapikan jadwal IG StudioSoft sesuai perintah Bos 6 Okt 2026:
  • maksimal 1 story per hari  → sisakan story cermin carousel (08:40)
  • 1 reel per hari            → sisakan slot 11:00, hapus slot 19:00
  • konten klinik dikeluarkan  → hapus story seri klinik (ss_storyvid_hc*) dan
                                 bersihkan caption yang menautkan artikel klinik
Pakai --go untuk benar-benar menghapus.
"""
import sys, json, time, urllib.request, urllib.error
from datetime import datetime, timezone, timedelta

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
import repliz_client as rc

IG = rc._ACC.STUDIOSOFT_IG
WIB = timezone(timedelta(hours=7))
KATA_KLINIK = ("klinik", "rumah sakit", "pasien", "dokter", "rsia", "kesehatan", "medis")


def ambil(path):
    r = urllib.request.Request("https://api.repliz.com" + path, headers=rc.AUTH_HEADER and {
        "Authorization": rc.AUTH_HEADER, "Content-Type": "application/json"})
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=120) as x:
                return json.loads(x.read())
        except urllib.error.HTTPError as e:
            return {"err": e.code, "msg": e.read().decode()[:150]}
        except Exception:
            time.sleep(3)
    return {}


keluar, page = [], 1
while True:
    d = ambil(f"/public/schedule?page={page}&limit=100")
    docs = (d or {}).get("docs") or []
    if not docs:
        break
    keluar += docs
    if len(docs) < 100:
        break
    page += 1

now = datetime.now(timezone.utc)
menunggu = []
for j in keluar:
    if j.get("accountId") != IG or j.get("status") != "pending":
        continue
    t = datetime.fromisoformat(j["scheduleAt"].replace("Z", "+00:00"))
    if t > now:
        menunggu.append((t.astimezone(WIB), j))
menunggu.sort()

hapus, simpan = [], []
for t, j in menunggu:
    tp = str(j.get("type")).lower()
    nama = ((j.get("medias") or [{}])[0].get("url") or "").split("/")[-1]
    alasan = None
    if tp == "story":
        if not nama.startswith("ss_story_canvas"):
            alasan = ("konten klinik (video seri hc)" if nama.startswith("ss_storyvid_hc")
                      else f"story tambahan ({t.strftime('%H:%M')})")
    elif tp == "video" and t.hour == 19:
        alasan = "reel kedua hari itu (slot 19:00)"
    (hapus if alasan else simpan).append((t, j, nama, alasan))

print(f"jadwal IG menunggu tayang: {len(menunggu)}")
print(f"  disimpan : {len(simpan)}")
print(f"  dihapus  : {len(hapus)}\n")

from collections import Counter
sebab = Counter(a for _, _, _, a in hapus)
for a, n in sebab.most_common():
    print(f"   {n:>3}× {a}")

print("\n=== rincian yang dihapus ===")
for t, j, nama, a in hapus:
    print(f"  {t.strftime('%d %b %H:%M')} | {j.get('type'):<6} | {nama[:38]:<40} | {a}")

print("\n=== caption yang masih menyebut klinik (akan dirapikan) ===")
for t, j, nama, a in simpan:
    cap = j.get("description") or ""
    kena = [k for k in KATA_KLINIK if k in cap.lower()]
    if kena:
        print(f"  {t.strftime('%d %b %H:%M')} | {j['_id']} | {j.get('title', '')[:40]} | {kena}")

if "--go" not in sys.argv:
    print("\n(dry run — pakai --go)")
    sys.exit(0)

ok = gagal = 0
for t, j, nama, a in hapus:
    try:
        rc.get_client().delete_schedule(j["_id"])
        ok += 1
    except Exception as e:
        gagal += 1
        print(f"  ❌ {j['_id']} {str(e)[:70]}")
    time.sleep(0.25)
print(f"\n  dihapus: {ok} | gagal: {gagal}")
