#!/usr/bin/env python3
"""Fase 1 StudioSoft — susun rencana dua item:
(a) 10 artikel ber-tayangan tapi nol klik  → calon perbaikan judul + meta
(b) 15 artikel lama paling relevan        → calon pemberian tautan ke halaman daftar agensi
Keluaran: drafts/ss_fase1_rencana.json + drafts/ss_fase1_rencana.md
"""
import json, re
from collections import Counter

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
d = json.load(open(f"{WS}/drafts/ss_fase1_data.json"))
posts = {p["link"].rstrip("/"): p for p in d["posts"]}
DAFTAR = "https://studiosoft.id/digital-agency-terbaik-di-surabaya/"
BERANDA = "https://studiosoft.id/"

# ---- kueri teratas per halaman ----
kueri = {}
for r in d["gsc_pasangan"]:
    kueri.setdefault(r["halaman"].rstrip("/"), []).append((r["tayang"], r["klik"], r["posisi"], r["kueri"]))
for k in kueri:
    kueri[k].sort(reverse=True)

TEMA_AGENSI = set("""agency agensi digital marketing seo jasa konsultan pemasaran website branding
klien kampanye iklan sosial media instagram tiktok konten bisnis umkm anggaran harga biaya paket
memilih freelancer inhouse tim strategi hasil laporan audit google ads kompetitor""".split())


def skor_relevan(p):
    teks = (p["slug"].replace("-", " ") + " " + p["_judul"] + " " + " ".join(
        re.findall(r"[a-z]{4,}", re.sub(r"<[^>]+>", " ", p["_raw"]).lower())[:400]))
    return sum(1 for w in set(re.findall(r"[a-z]{4,}", teks.lower())) if w in TEMA_AGENSI)


# ---- (a) artikel nol klik ----
nol = []
for h in d["gsc_halaman"]:
    p = posts.get(h["halaman"].rstrip("/"))
    if not p or h["klik"] != 0 or h["tayang"] < 30:
        continue
    p["_tayang"], p["_posisi"] = h["tayang"], h["posisi"]
    nol.append(p)
nol.sort(key=lambda p: -p["_tayang"])
kandidat_nol = [p for p in nol if p["_tgl"] < "2026-10-01"][:10]   # jangan sentuh artikel baru

# ---- (b) artikel untuk tautan internal ----
kandidat_link = []
for p in d["posts"]:
    if p["_raw"].count("digital-agency-terbaik-di-surabaya"):
        continue
    if p["slug"] in ("digital-agency-terbaik-di-surabaya",):
        continue
    p["_skor"] = skor_relevan(p)
    p["_sudah_baca_juga"] = ">baca juga<" in p["_raw"].lower() or "baca juga" in p["_raw"].lower()
    if p["_skor"]:
        kandidat_link.append(p)
kandidat_link.sort(key=lambda p: (-p["_skor"], p["_tgl"]), reverse=False)
kandidat_link = sorted(kandidat_link, key=lambda p: -p["_skor"])[:15]

json.dump({
    "nol_klik": [{"id": p["id"], "judul": p["_judul"], "link": p["link"], "tayang": p["_tayang"],
                  "posisi": p["_posisi"], "kueri": kueri.get(p["link"].rstrip("/"), [])[:6]} for p in kandidat_nol],
    "tautan": [{"id": p["id"], "judul": p["_judul"], "link": p["link"], "kata": p["_kata"],
                "skor": p["_skor"], "sudah_baca_juga": p["_sudah_baca_juga"]} for p in kandidat_link],
}, open(f"{WS}/drafts/ss_fase1_rencana.json", "w"), ensure_ascii=False, indent=1)

print(f"=== (a) nol klik (tayangan>=30, umur >5 hari): {len(nol)} artikel; dipilih 10 teratas ===")
for p in kandidat_nol:
    print(f"  #{p['id']:>5} | {p['_tayang']:>5} tayang | pos {p['_posisi']:>5} | {p['_judul'][:62]}")
    for t, k, pos, q in kueri.get(p["link"].rstrip("/"), [])[:3]:
        print(f"          «{q}»  {t} tayang · {k} klik · pos {pos}")

print(f"\n=== (b) calon tautan internal ke halaman daftar: {len(kandidat_link)} artikel ===")
for p in kandidat_link:
    print(f"  #{p['id']:>5} | skor {p['_skor']:>3} | {p['_kata']:>5} kata | {p['_judul'][:62]}")

print(f"\n→ drafts/ss_fase1_rencana.json")
