#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Bersihkan jadwal IG StudioSoft yang tidak sesuai aturan reel baru (30 Sep 2026, 22:55 WIB).

Aturan baru Bos: reel 2x/hari **11:00 & 19:00 WIB**, BG bergantian putih/biru, sumber album
`ss_opt2_*` (biru 05/07/09/11/13/17/19, putih 06/08/10/14/16/18/20).

Yang DIHAPUS (jadwal pending, belum tayang):
  • `type=video` IG SS dengan scheduleAt >= **1 Okt 2026 00:00 WIB** (reel navy hc 11:00 + reel
    putih 23:00 versi lama) — digantikan reel putih/biru 11:00 & 19:00.
  • `type=story` IG SS yang merupakan **story mirror** (menit :10) dengan scheduleAt >= 1 Okt 00:00 WIB.

Yang DIBIARKAN: story 07:00/14:00/20:00, story catch-up hc26 (1 Okt 22:00), dan semua jadwal
30 Sep (termasuk reel putih 23:00 malam ini yang diminta Bos).

Pakai: python3 ss_ig_reel_bersihkan.py [--go]
"""
import datetime
import sys
import time

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

IG_SS = "6a38ac33c5ff4ce3a3231232"
WIB = datetime.timezone(datetime.timedelta(hours=7))
CUTOFF = datetime.datetime(2026, 9, 30, 17, 0, tzinfo=datetime.timezone.utc)   # 1 Okt 00:00 WIB


def semua_jadwal(c):
    docs, page = [], 1
    while page <= 200:
        r = None
        for a in range(6):
            try:
                r = c.get_schedules(page=page, limit=100)
                break
            except Exception:
                time.sleep(5 + 3 * a)
        if r is None:
            raise SystemExit("gagal membaca jadwal Repliz")
        b = r.get("docs") or []
        if not b:
            break
        docs += b
        if len(b) < 100:
            break
        page += 1
    return docs


def main():
    go = "--go" in sys.argv
    c = get_client()
    docs = semua_jadwal(c)
    target = []
    for d in docs:
        if d.get("accountId") != IG_SS:
            continue
        w = datetime.datetime.fromisoformat(str(d.get("scheduleAt")).replace("Z", "+00:00"))
        if w.year >= 2099 or w < CUTOFF:
            continue
        if str(d.get("status")).lower() not in ("pending", "draft"):
            continue
        tipe = str(d.get("type")).lower()
        nama = [(m.get("url") or "").split("/")[-1] for m in (d.get("medias") or [])]
        alasan = None
        if tipe in ("video", "reel"):
            alasan = "reel lama (slot 11:00 navy / 23:00 putih)"
        elif tipe == "story" and w.minute == 10:
            alasan = "story mirror reel lama"
        if alasan:
            target.append((d, w.astimezone(WIB), tipe, nama, alasan))

    target.sort(key=lambda x: x[1])
    print(f"jadwal IG SS yang dihapus: {len(target)}")
    for d, w, tipe, nama, alasan in target:
        print(f"  {w:%d %b %H:%M} WIB | {tipe:6s} | {nama[0] if nama else '-':32s} | {alasan} | {d.get('_id')}")
    if not go:
        print("\n(dry-run — pakai --go)")
        return

    ok = 0
    for d, w, tipe, nama, alasan in target:
        try:
            c.delete_schedule(d["_id"])
            ok += 1
            print(f"  🗑️  {w:%d %b %H:%M} WIB {tipe} {nama[0] if nama else '-'}")
        except Exception as e:
            print(f"  ❌ {d.get('_id')}: {str(e)[:110]}")

    # verifikasi: baca ulang
    docs2 = semua_jadwal(c)
    sisa = [x.get("_id") for x, *_ in target if any(y.get("_id") == x.get("_id") for y in docs2)]
    print(f"\nselesai: {ok}/{len(target)} dihapus, {len(sisa)} masih ada")


if __name__ == "__main__":
    main()
