#!/usr/bin/env python3
"""2026-11-02: full core bucket dump + offers grep + key chronologies."""
import json, re
from datetime import datetime
from collections import Counter

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

GROUPED = {"DiscussingFilm","nofilmschool","OpenAI","AnthropicAI","interesting_aIl","hubermanlab",
 "AIsaOneHQ","AiWithTariq","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"}

core = [x for x in q if x["handle"] not in GROUPED]
core.sort(key=lambda z: z["score"], reverse=True)
print("="*80)
print(f"FULL CORE BUCKET ({len(core)}) sorted by score")
for i,x in enumerate(core,1):
    v=x["views"] or 0
    lk=(x["likes"]/v*100) if v else 0
    print(f"{i:2d}|@{x['handle']:15s}|{x['likes']:5d}L|{x['rt']:4d}RT|{x['replies']:4d}R|{v:8d}V|lk%{lk:5.2f}|{x['date']}")
    print(f"    {x['text'][:260]}")
    print(f"    {x['url']}")

print("\n"+"="*80)
print("LIKE-RATE LEADERBOARD (core, >=500V)")
lr=sorted([x for x in core if (x["views"] or 0)>=500], key=lambda z:(z["likes"]/z["views"]), reverse=True)
for x in lr[:12]:
    print(f"  @{x['handle']:15s}|{x['likes']:5d}L|{x['views']:8d}V|lk%{x['likes']/x['views']*100:5.2f}|{x['date']}|{x['text'][:90]}")

# ---- offers grep over in-window ORIGINALS across whole dataset ----
PATTERNS = {
 "flova": r"flova", "pika": r"pika", "higgsfield": r"higgsfield", "kling": r"kling",
 "runway": r"runway", "seedance": r"seedance", "openart": r"openart", "topaz": r"topaz",
 "davinci": r"davinci", "resolve": r"resolve", "capcut": r"capcut", "dreamina": r"dreamina",
 "magnific": r"magnific", "topview": r"topview", "pixverse": r"pixverse", "nebius": r"nebius",
 "free": r"\bfree\b", "discount": r"\b\d{1,2}% off\b|\bhalf (the )?price\b|price of 1|buy 1",
 "credits": r"\bcredits?\b", "unlimited": r"unlimited", "launch special": r"launch special",
 "black friday": r"black friday", "giveaway": r"giveaway", "referral": r"referral",
 "affiliate": r"affiliate", "utm": r"utm_", "sponsored": r"#ad\b|#sponsored|paid partnership",
 "sale": r"\bsale\b|\bdeal\b|\boffer\b", "trial": r"free trial|try for free",
 "api": r"\bapi\b", "open weights": r"open weights|open-source|open source",
 "huggingface": r"huggingface", "github": r"github", "glif": r"glif",
 "aeon": r"aeon", "p-video": r"p-video", "veo": r"\bveo\b", "sora": r"sora",
}
cut = datetime(2026,10,30,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

inwin=[]
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 dt and dt>=cut: inwin.append((h,t))
print("\n"+"="*80)
print(f"OFFERS GREP over {len(inwin)} in-window originals")
for name,rx in PATTERNS.items():
    r=re.compile(rx,re.I)
    hits=[(h,t) for h,t in inwin if r.search(t.get("text") or "")]
    if not hits: 
        print(f"  {name:14s} 0")
        continue
    print(f"  {name:14s} {len(hits)}  -> " + ", ".join(f"@{h}({t.get('likeCount')}/{t.get('viewCount')})" for h,t in hits[:6]))

print("\n"+"="*80)
print("KEY HANDLE CHRONOLOGY (in-window originals, newest last)")
for h in ["EHuanglu","azed_ai","ElsaSofia__AI","CharaspowerAI","c_valenzuelab","runwayml",
          "Kling_ai","pika_labs","ItsMaryamAi","venturetwins","NVIDIAAI","openart_ai",
          "AIsaOneHQ","AiWithTariq","Soaima_Ai","AI__TSUBAKI"]:
    tw=d["raw"].get(h,[])
    origs=[t for t in tw if not t.get("retweeted_tweet") and not (t.get("text") or "").startswith("RT @")]
    origs=[t for t in origs if (pd(t.get("createdAt","")) or datetime.min)>=cut]
    origs.sort(key=lambda t: pd(t.get("createdAt","")) or datetime.min)
    print(f"\n-- @{h} ({len(origs)} in-window originals) --")
    for t in origs:
        print(f"   {t.get('createdAt','')[:16]} | {t.get('likeCount')}L {t.get('retweetCount')}RT {t.get('replyCount')}R {t.get('viewCount')}V | {(t.get('text') or '')[:200].replace(chr(10),' ')}")
