#!/usr/bin/env python3
"""Final checks: watchlist diff, set membership, dormancy tail, core top-10 table."""
import json, re
from datetime import datetime, timezone, timedelta

DATE = "2026-11-07"
RAW = "/home/kiro/trend-engine/trends/x/raw"
FMT = "%a %b %d %H:%M:%S %z %Y"
now = datetime.now(timezone.utc)
D = json.load(open(f"{RAW}/scan_results_{DATE}_FULL.json"))
res = D["raw"]
cutoff = datetime.strptime(f"{DATE} 00:00:00 +0000", "%Y-%m-%d %H:%M:%S %z") - timedelta(days=3)

# watchlist build
WATCH = "/home/kiro/trend-engine/trends/x/raw/rising-accounts.md"
src = open("/home/kiro/.hermes/scripts/x-account-monitor-run.py").read()
def pset(name):
    m = re.search(name + r"\s*=\s*[\[\{](.*?)[\]\}]\s*\n", src, re.S)
    return set(re.findall(r'"([A-Za-z0-9_]+)"', m.group(1))) if m else set()
DEAD = pset("DEAD"); DORMANT = pset("DORMANT"); CORE = pset("CORE")
IRREL = pset("IRRELEVANT")
md = open(WATCH).read()
SKIP = pset("SKIP")
raw_handles = re.findall(r"@(\w+)", md)
seen, build = set(), []
for h in raw_handles:
    if h.lower() in {s.lower() for s in SKIP}: continue
    if h in seen: continue
    seen.add(h); build.append(h)
final = [h for h in build if h not in DEAD and h not in DORMANT]
print(f"watchlist md handles: {len(set(raw_handles))}, built: {len(build)}, final scan: {len(final)}")
print(f"scanned this run: {len(D['handles'])}  failures: {D['failures']}")
print(f"CORE={len(CORE)} IRRELEVANT={len(IRREL)} DEAD={sorted(DEAD)} DORMANT={len(DORMANT)}")
print("overlap CORE&IRREL:", CORE & IRREL)

# coverage
q = D["qualifying"]
cov = len({x["handle"] for x in q})
print(f"qualifying {len(q)}, handles with qualifying: {cov}")

# membership check for the suspected
for h in ["AiWithTariq", "EinsiaAI", "perplexity_ai", "heyglif", "Flovaai", "CharaspowerAI"]:
    tags = []
    if h in CORE: tags.append("CORE")
    if h in IRREL: tags.append("IRRELEVANT")
    print(f"  {h:16s} -> {tags or 'AUTO-DISCOVERED (unclassified)'}")

# core top10 table with like rate
def rate(L,V): return (L/V*100) if V else 0
rows = []
for x in q:
    h = x["handle"]
    if h in IRREL or h in {"DiscussingFilm","nofilmschool","OpenAI","AnthropicAI","NVIDIAAI",
                            "interesting_aIl","hubermanlab"}: continue
    if h not in CORE and h not in {"heyglif","azed_ai","ElsaSofia__AI","ItsMaryamAi","AI__TSUBAKI",
                                   "WuxiaRocks","c_valenzuelab","AIWarper","Curiosity"}: 
        pass
    rows.append(x)
print("\n=== ORGANIC CORE TOP 10 (computed) ===")
rows.sort(key=lambda x: -(x["likes"]+x["rt"]*2+x["replies"]*3+x["views"]/100))
n=0
for x in rows:
    r = rate(x["likes"], x["views"])
    if r < 0.15 and x["views"] > 50000: 
        continue
    n+=1
    print(f"{n:2d}|@{x['handle']:16s}|{x['likes']:6d}L|{x['rt']:5d}RT|{x['replies']:4d}R|{x['views']:9d}V|{r:5.2f}%|{x['date']}")
    print(f"   {x['text'][:120]}")
    print(f"   {x['url']}")
    if n>=10: break
