#!/usr/bin/env python3
"""hc44 audit: (1) artikel healthcare TERBARU di studiosoft.id, (2) jejak pemakaian
artikel di Threads/LinkedIn/FB StudioSoft dari dump Repliz segar."""
import json, re, subprocess, sys

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

DUMP = "/tmp/repliz_all_20260923.json"

print("### 1) WP: kategori healthcare-digital (1042) + artikel terbaru")
r = subprocess.run(["curl", "-s", "--http1.1", "--max-time", "150",
                    "https://studiosoft.id/wp-json/wp/v2/posts?categories=1042&per_page=50&_fields=date,slug,link"],
                   capture_output=True, text=True)
try:
    hc = json.loads(r.stdout)
except Exception as e:
    print("GAGAL fetch kategori:", e, r.stdout[:300])
    hc = []
for p in hc:
    print("  %s %s" % (p["date"][:10], p["slug"]))
print("  total kategori hc:", len(hc))

print("\n### 1b) WP: 30 artikel TERBARU (semua kategori)")
slugs_all = []
for page in range(1, 4):
    r = subprocess.run(["curl", "-s", "--http1.1", "--max-time", "150",
                        "https://studiosoft.id/wp-json/wp/v2/posts?per_page=100&page=%d&_fields=date,slug,categories" % page],
                       capture_output=True, text=True)
    try:
        d = json.loads(r.stdout)
    except Exception:
        break
    if not isinstance(d, list) or not d:
        break
    slugs_all.extend(d)
print("  total WP:", len(slugs_all))
for p in sorted(slugs_all, key=lambda x: x["date"], reverse=True)[:30]:
    mark = "HC" if 1042 in (p.get("categories") or []) else "  "
    print("  %s %s %s" % (mark, p["date"][:10], p["slug"]))

print("\n### 2) Dump jadwal Repliz segar -> %s" % DUMP)
c = ReplizClient()
docs, page = [], 1
import time
while True:
    last = None
    for i in range(6):
        try:
            d = c.get("/public/schedule?page=%d&limit=100" % page)
            break
        except Exception as e:
            last = e
            time.sleep(3 + 3 * i)
    else:
        raise last
    docs.extend(d.get("docs", []))
    if page >= (d.get("totalPages") or 1):
        break
    page += 1
json.dump(docs, open(DUMP, "w"))
print("  docs:", len(docs))

url_re = re.compile(r"studiosoft\.id/([a-z0-9\-]+)")


def used_set(aid):
    u = {}
    for d in docs:
        if d.get("accountId") != aid:
            continue
        t = " ".join([(d.get("description") or ""), (d.get("title") or "")])
        for s in url_re.findall(t):
            u.setdefault(s, []).append(((d.get("scheduleAt") or "")[:16], d.get("status"), d.get("type")))
    return u


TH = used_set(ACC.STUDIOSOFT_THREADS)
LI = used_set(ACC.STUDIOSOFT_LINKEDIN)
FB = used_set(ACC.STUDIOSOFT_FB)

print("\n### 3) THREADS SS — jejak artikel healthcare (urut terakhir tayang)")
rows = []
for s in [p["slug"] for p in hc] + [x for x in used_set(ACC.STUDIOSOFT_THREADS)]:
    pass
allslugs = set([p["slug"] for p in hc]) | set(TH)
for s in sorted(allslugs):
    rs = sorted(TH.get(s, []))
    if not rs:
        continue
    ok = [r for r in rs if r[1] == "success"]
    pend = [r for r in rs if r[1] in ("pending", "scheduled", "draft")]
    rows.append((max([r[0] for r in rs]), s, len(ok), len(pend), rs[-1][1]))
for r in sorted(rows, reverse=True):
    print("  last=%s %-58s succ=%d pend=%d laststatus=%s" % r)

print("\n### 4) LINKEDIN SS — artikel healthcare FREE / hanya error")
for p in hc:
    s = p["slug"]
    rs = LI.get(s)
    if not rs:
        print("  FREE  %s %s" % (p["date"][:10], s))
    elif not any(r[1] == "success" for r in rs):
        print("  NO-OK %s %s -> %s" % (p["date"][:10], s, sorted(rs)[-2:]))

print("\n### 5) FACEBOOK SS — artikel healthcare FREE / hanya error")
for p in hc:
    s = p["slug"]
    rs = FB.get(s)
    if not rs:
        print("  FREE  %s %s" % (p["date"][:10], s))
    elif not any(r[1] == "success" for r in rs):
        print("  NO-OK %s %s -> %s" % (p["date"][:10], s, sorted(rs)[-2:]))
