#!/usr/bin/env python3
"""Analisa hc71: artikel baru studiosoft.id + jejak & jadwal Threads/FB/LI per artikel HC."""
import json, re, sys, time
from datetime import datetime, timezone
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC
import repliz_openssl_transport
from openssl_fetch import fetch
repliz_openssl_transport.install(verbose=False)

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = "/tmp/hc71_analisa.json"


def strip_chunked(b: bytes) -> bytes:
    if not re.match(rb"^[0-9a-fA-F]{1,7}\r\n", b):
        return b
    out = bytearray(); i = 0
    while i < len(b):
        j = b.find(b"\r\n", i)
        if j == -1:
            break
        try:
            size = int(b[i:j].split(b";")[0].strip(), 16)
        except ValueError:
            break
        if size == 0:
            break
        out += b[j + 2:j + 2 + size]
        i = j + 2 + size + 2
    return bytes(out)


print("=== ARTIKEL TERBARU studiosoft.id ===")
arts = []
for page in (1, 2):
    st, head, body = fetch("https://studiosoft.id/wp-json/wp/v2/posts?per_page=50&page=%d"
                           "&_fields=id,link,title,date,slug,categories" % page)
    print("page", page, "status", st)
    if st != 200:
        break
    try:
        arr = json.loads(strip_chunked(body).decode("utf-8", "replace"))
    except Exception as e:
        print("parse gagal", e, body[:150])
        break
    for x in arr:
        arts.append({"id": x.get("id"), "link": x.get("link"), "slug": x.get("slug"),
                     "date": x.get("date"),
                     "title": (x.get("title") or {}).get("rendered") if isinstance(x.get("title"), dict) else x.get("title")})
    if len(arr) < 50:
        break
json.dump(arts, open("/tmp/hc71_articles.json", "w"), ensure_ascii=False, indent=1)
for a in arts[:14]:
    print(" ", a["date"], a["id"], a["slug"], "|", (a["title"] or "")[:70])

HC_SLUGS = [
 "9-contoh-konten-digital-marketing-rumah-sakit-yang-edukatif-dan-tetap-etis",
 "10-channel-digital-marketing-rumah-sakit-yang-wajib-dikelola-di-era-online",
 "7-strategi-digital-marketing-rumah-sakit-untuk-menambah-pasien-setiap-bulan",
 "cara-klinik-kecantikan-di-surabaya-bisa-ditemukan-lebih-cepat-di-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",
 "7-aplikasi-mental-health-anak-usia-4-10-tahun-yang-harus-dicoba-orang-tua",
 "pembuatan-website-rumah-sakit",
 "jasa-digital-marketing-rs",
 "jasa-digital-marketing-klinik",
 "panduan-seo-klinik-rumah-sakit",
 "seo-rumah-sakit",
 "digital-marketing-rumah-sakit-indikator",
 "rs-klinik-digital-marketing-2026",
 "google-business-profile-klinik",
 "kenapa-rumah-sakit-dan-klinik-wajib-punya-strategi-digital-marketing",
 "website-rumah-sakit-gagal-pasien",
 "konten-edukasi-kesehatan-kepercayaan-pasien",
]

c = ReplizClient()
docs, page = [], 1
while page < 130:
    for attempt in range(4):
        try:
            d = c.get_schedules(page=page, limit=100)
            break
        except Exception as e:
            print("retry page", page, e, flush=True)
            time.sleep(4)
    else:
        break
    ds = d.get("docs", []) if isinstance(d, dict) else d
    if not ds:
        break
    docs += ds
    if len(ds) < 100:
        break
    page += 1
print("\ntotal jadwal:", len(docs))
json.dump(docs, open("/tmp/hc71_sched.json", "w"), ensure_ascii=False)

ACCOUNTS = {
    ACC.STUDIOSOFT_THREADS: "THREADS",
    ACC.STUDIOSOFT_LINKEDIN: "LINKEDIN",
    ACC.STUDIOSOFT_FB: "FACEBOOK",
    ACC.STUDIOSOFT_IG: "IG",
}
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M")
print("now UTC:", now)


def hits_for(slug):
    pat = re.compile(re.escape(slug))
    res = {"threads": [], "linkedin": [], "facebook": [], "ig": []}
    for d in docs:
        plat = ACCOUNTS.get(d.get("accountId"))
        if not plat:
            continue
        blob = json.dumps({k: d.get(k) for k in ("title", "description", "topic")}, ensure_ascii=False)
        for m in (d.get("medias") or []):
            blob += " " + (m.get("url") or "")
        if pat.search(blob):
            res[plat.lower()].append((str(d.get("scheduleAt"))[:16], d.get("status"),
                                      d.get("type"), (d.get("_id") or d.get("id") or "")[:12]))
    return res


NEW_CANDIDATES = []
for a in arts[:12]:
    if a["slug"] not in HC_SLUGS and a["slug"] not in NEW_CANDIDATES:
        NEW_CANDIDATES.append(a["slug"])

summary = {}
for slug in HC_SLUGS + NEW_CANDIDATES:
    h = hits_for(slug)
    thr, li, fb = sorted(h["threads"]), sorted(h["linkedin"]), sorted(h["facebook"])
    fut_thr = [x for x in thr if x[0] >= now and x[1] in ("pending", "scheduled", "draft")]
    last_thr = [x for x in thr if x[0] < now]
    fut_fb = [x for x in fb if x[0] >= now and x[1] in ("pending", "scheduled", "draft")]
    last_fb = [x for x in fb if x[0] < now]
    succ_fb = [x for x in fb if x[1] == "success"]
    summary[slug] = {"last_thr": last_thr[-1] if last_thr else None, "fut_thr": fut_thr,
                     "last_fb": last_fb[-1] if last_fb else None,
                     "last_fb_success": succ_fb[-1] if succ_fb else None,
                     "fut_fb": fut_fb,
                     "li_total": len(li), "li_fut": [x for x in li if x[0] >= now]}
    print("\n" + slug)
    print("   thr_last:", summary[slug]["last_thr"], "| thr_future:", fut_thr)
    print("   fb_last :", summary[slug]["last_fb"], "| fb_succ:", summary[slug]["last_fb_success"],
          "| fb_future:", fut_fb)
    print("   LI total:", len(li), "future:", len(summary[slug]["li_fut"]))

json.dump(summary, open(OUT, "w"), indent=1, ensure_ascii=False)
print("\n->", OUT)

print("\n=== KANDIDAT THREADS (tanpa jadwal mendatang, urut jejak tertua) ===")
belum = [(v["last_thr"][0] if v["last_thr"] else "0000", k) for k, v in summary.items()
         if k in HC_SLUGS and not v["fut_thr"]]
for t, k in sorted(belum):
    print(" ", t, k)

print("\n=== KANDIDAT FB (tanpa jadwal FB mendatang, urut jejak sukses tertua) ===")
belum = [(v["last_fb_success"][0] if v["last_fb_success"] else "0000", k) for k, v in summary.items()
         if k in HC_SLUGS and not v["fut_fb"]]
for t, k in sorted(belum):
    print(" ", t, k)

print("\n=== ARTIKEL BARU (non-HC) & jejak LI ===")
for slug in NEW_CANDIDATES:
    s = summary[slug]
    print(" ", slug, "| LI total:", s["li_total"], "| LI future:", len(s["li_fut"]),
          "| thr:", s["last_thr"], "| fb:", s["last_fb"])
