#!/usr/bin/env python3
"""Core full dump + like-rate leaderboard + offer grep + chronologies."""
import json, re
from datetime import datetime

D = "/home/kiro/trend-engine/trends/x/raw/"
d = json.load(open(D + "scan_results_2026-11-03_FULL.json"))
q = d["qualifying"]

IRRELEVANT = {"AIBuzzNews","AIGuideHQ","AITECHio","AIFrontliner","TheAIColony","AITOPIAai",
 "GoogleLabs","GoogleAI","DonutAI","cladlabs","FaithJaiye2187","KammelaBala","MyStageAI",
 "AlexStudio44","AI_with_jasmin","Ai_Vaidehi","ChrisLaubAI","CINEMA505","AIScottAdams",
 "AISuperDomain","AI_Jasonyu","AIByLeo"}
FILM = {"DiscussingFilm","nofilmschool"}
LABS = {"OpenAI","AnthropicAI"}
OFFTOPIC = {"interesting_aIl"}
HEALTH = {"hubermanlab"}
NEW = {"AisaOneHQ","AiWithTariq","AIsaOneHQ"}

def rate(x):
    v = x["views"] or 0
    return (x["likes"]/v*100) if v else 0.0

core = [x for x in q if x["handle"] not in IRRELEVANT|FILM|LABS|OFFTOPIC|HEALTH|NEW]

print("="*70)
print(f"FULL CORE DUMP ({len(core)} posts) sorted by score")
for i,x in enumerate(sorted(core,key=lambda z:z["score"],reverse=True),1):
    print(f"{i:2d}|@{x['handle']:16s}|{x['likes']:5d}L|{x['rt']:4d}RT|{x['replies']:3d}R|{x['views']:8d}V|lk%{rate(x):5.2f}|{x['date']}")
    print(f"    {x['text'][:260]}")
    print(f"    {x['url']}")

print("\n"+"="*70)
print("LIKE-RATE leaderboard (core, likes>=100)")
for x in sorted([z for z in core if z["likes"]>=100],key=rate,reverse=True)[:15]:
    print(f"  lk%{rate(x):6.2f}|@{x['handle']:16s}|{x['likes']:5d}L|{x['views']:8d}V|{x['date']}|{x['text'][:100]}")

print("\n"+"="*70)
print("IRRELEVANT bucket AI-relevant posts")
import re as _re
AI_TERMS = _re.compile(r"\b(ai\b|a\.i\.|seedance|kling|runway|veo|sora|minimax|hailuo|higgsfield|midjourney|nano ?banana|gpt-?[0-9.]*|chatgpt|gemini|generative|render|vfx|ai film|aifilm|motion capture|deepfake|davinci|blender|storyboard|(ai|3d|generated) ?animation|diffusion|comfyui|prompt)", _re.I)
for x in sorted([z for z in q if z["handle"] in IRRELEVANT and AI_TERMS.search(z["text"])],key=lambda z:z["score"],reverse=True):
    print(f"  @{x['handle']:14s}|{x['likes']:5d}L|{x['views']:8d}V|{x['date']}|{x['text'][:150]}")
    print(f"     {x['url']}")

print("\n"+"="*70)
print("LABS bucket")
for x in sorted([z for z in q if z["handle"] in LABS],key=lambda z:z["score"],reverse=True):
    print(f"  @{x['handle']:14s}|{x['likes']:6d}L|{x['rt']:4d}RT|{x['views']:9d}V|{x['date']}")
    print(f"     {x['text'][:250]}")
    print(f"     {x['url']}")

print("\n"+"="*70)
print("OFFER / CREDIT GREP over in-window originals (raw)")
PATS = ["free","credit","discount","% off","off)","promo","coupon","deal","trial","giveaway","contest",
 "launch special","unlimited","\\$[0-9]","price","pricing","per sec","/sec","subscription","annual",
 "black friday","cyber","nov(ember)? [0-9]","until","expires","ends","coupon","referral","invite",
 "beta","waitlist","open weights","open source","huggingface","github","api","davinci","topaz",
 "magnific","nebius","pixverse","dreamina","capcut","genjutsu","money back","refund","half price"]
cutoff = datetime(2026,10,31,0,0,0)
def pd(s):
    try: return datetime.strptime(s,"%a %b %d %H:%M:%S %z %Y").replace(tzinfo=None)
    except Exception: return None
hits = {}
for h,tw in d["raw"].items():
    for t in tw:
        if t.get("retweeted_tweet") or (t.get("text") or "").startswith("RT @"): continue
        dt = pd(t.get("createdAt",""))
        if not dt or dt < cutoff: continue
        txt = (t.get("text") or "").replace("\n"," ")
        low = txt.lower()
        for p in PATS:
            if re.search(p, low):
                hits.setdefault(p, []).append((h, t.get("likeCount") or 0, t.get("viewCount") or 0, dt.strftime("%m-%d %H:%M"), txt[:220], t.get("id")))
print("  in-window originals scanned:", sum(1 for h,tw in d["raw"].items() for t in tw if not t.get("retweeted_tweet") and not (t.get("text") or "").startswith("RT @") and (pd(t.get("createdAt","")) or datetime.min)>=cutoff))
for p in ["launch special","unlimited","half price","free","credit","% off","black friday","cyber","open weights","open source","davinci","topaz","magnific","nebius","pixverse","dreamina","genjutsu","contest","giveaway","promo","coupon","subscription","api"]:
    v = hits.get(p, [])
    if not v: 
        print(f"  [{p}] 0 hits")
        continue
    print(f"  [{p}] {len(v)} hits")
    for h,l,vs,dt,txt,i in sorted(v,key=lambda z:-z[1])[:6]:
        print(f"     @{h} {l}L/{vs}V {dt} id={i} :: {txt}")
