#!/usr/bin/env python3
"""Dump semua jadwal Repliz ke cache lokal + analisis jejak per artikel.

Cache: _ss_docs_cache.json (dipakai ulang kalau < 60 menit).
"""
import json
import os
import sys
import time
from datetime import datetime, timezone

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
CACHE = os.path.join(WS, "_ss_docs_cache.json")
sys.path.insert(0, WS)
from repliz_client import ReplizClient, ACC
import repliz_openssl_transport

repliz_openssl_transport.install(verbose=False)
c = ReplizClient()

if os.path.exists(CACHE) and time.time() - os.path.getmtime(CACHE) < 3600:
    docs = json.load(open(CACHE))
    print("cache dipakai: %d docs" % len(docs))
else:
    docs, page = [], 1
    while True:
        for i in range(6):
            try:
                d = c.get("/public/schedule?page=%d&limit=100" % page)
                break
            except Exception as e:
                print("retry %d: %s" % (i, e))
                time.sleep(3 + 3 * i)
        docs.extend(d.get("docs", []))
        if page >= (d.get("totalPages") or 1):
            break
        page += 1
    json.dump(docs, open(CACHE, "w"))
    print("dump baru: %d docs" % len(docs))

A = {"THR": ACC.STUDIOSOFT_THREADS, "LI": ACC.STUDIOSOFT_LINKEDIN,
     "FB": ACC.STUDIOSOFT_FB, "IG": ACC.STUDIOSOFT_IG}
ids = {v: k for k, v in A.items()}

HC = [
    ("jasa-digital-marketing-klinik", "Jasa Digital Marketing Klinik: Cara Menarik Pasien Baru dari Google"),
    ("jasa-digital-marketing-rs", "Jasa Digital Marketing RS: Cara Memilih Agensi Tepat"),
    ("pembuatan-website-rumah-sakit", "Pembuatan Website Rumah Sakit: Fitur Wajib dan Vendor"),
    ("seo-rumah-sakit", "SEO Rumah Sakit: 5 Pencarian Pasien yang Wajib Dikuasai"),
    ("digital-marketing-rumah-sakit-indikator", "Digital Marketing Rumah Sakit: 6 Indikator Wajib Pantau"),
    ("panduan-seo-klinik-rumah-sakit", "Panduan SEO untuk Klinik dan Rumah Sakit: Biar Mudah Ditemukan Pasien"),
    ("rs-klinik-digital-marketing-2026", "Digital Marketing Rumah Sakit & Klinik: Panduan Lengkap 2026"),
    ("google-business-profile-klinik", "Google Business Profile untuk Klinik: Cara Biar Pasien Gampang Nemu Lokasi Anda"),
    ("9-contoh-konten-digital-marketing-rumah-sakit-yang-edukatif-dan-tetap-etis", "9 Contoh Konten Digital Marketing Rumah Sakit yang Edukatif dan Tetap Etis"),
    ("cara-klinik-kecantikan-di-surabaya-bisa-ditemukan-lebih-cepat-di-google", "Cara Klinik Kecantikan di Surabaya Bisa Ditemukan Lebih Cepat di Google"),
    ("7-strategi-digital-marketing-rumah-sakit-untuk-menambah-pasien-setiap-bulan", "7 Strategi Digital Marketing Rumah Sakit untuk Menambah Pasien Setiap Bulan"),
    ("10-channel-digital-marketing-rumah-sakit-yang-wajib-dikelola-di-era-online", "10 Channel Digital Marketing Rumah Sakit yang Wajib Dikelola di Era Online"),
    ("strategi-seo-terbaik-untuk-klinik-kecantikan-di-surabaya-tingkatkan-pasien-lewat-google", "Strategi SEO Terbaik untuk Klinik Kecantikan di Surabaya: Tingkatkan Pasien Lewat Google"),
    ("tips-seo-digital-marketing-surabaya-optimasi-local-untuk-klinik-dan-bengkel-lokal", "Tips SEO Digital Marketing Surabaya: Optimasi Local untuk Klinik dan Bengkel Lokal"),
    ("kenapa-rumah-sakit-dan-klinik-wajib-punya-strategi-digital-marketing", "Kenapa Rumah Sakit dan Klinik Wajib Punya Strategi Digital Marketing"),
    ("konten-edukasi-kesehatan-kepercayaan-pasien", "Pentingnya Konten Edukasi Kesehatan untuk Meningkatkan Kepercayaan Pasien"),
    ("website-rumah-sakit-gagal-pasien", "Kenapa Website Rumah Sakit Sering Gagal Menghasilkan Pasien Baru?"),
    ("7-aplikasi-mental-health-anak-usia-4-10-tahun", "7 Aplikasi Mental Health Anak Usia 4-10 Tahun yang Harus Dicoba Orang Tua"),
]
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S")
print("\nNOW:", now, "(WIB %s)" % (datetime.now(timezone.utc).astimezone().isoformat()))
print("\n%-62s | %-20s | %-20s | %-20s" % ("ARTIKEL (key)", "THR terakhir", "LI terakhir", "FB terakhir"))
for slug, title in HC:
    row = []
    for acc in ("THR", "LI", "FB"):
        past, future = [], []
        for s in docs:
            if s.get("accountId") != A[acc]:
                continue
            t = (s.get("title") or "")
            if slug.replace("-", " ") not in t.lower() and title[:40].lower() not in t.lower():
                continue
            at = (s.get("scheduleAt") or "")[:19]
            st = (s.get("status") or "").lower()
            (future if at > now and st in ("pending", "scheduled", "draft") else past).append((at, st))
        pf = sorted(past)[-1] if past else ("-", "-")
        fu = sorted(future)
        row.append("%s%s" % ("%s %s" % pf, " !!FUT %s" % fu[0][0] if fu else ""))
    print("%-62s | %-20s | %-20s | %-20s" % (slug[:62], row[0][:20], row[1][:20], row[2][:20]))

print("\n=== LI SLOT TERPAKAI 26-29 Okt ===")
for s in docs:
    if s.get("accountId") == ACC.STUDIOSOFT_LINKEDIN and (s.get("status") or "").lower() in ("pending", "scheduled") and "2026-10-26" <= (s.get("scheduleAt") or "") <= "2026-10-30":
        print(s["scheduleAt"][:19], len(s.get("medias") or []), (s.get("title") or "")[:60])
