#!/usr/bin/env python3
"""Offer grep, outlier verification, bucket split, film audit, full text."""
import json, re
from datetime import datetime, timedelta, timezone

D = json.load(open("/home/kiro/trend-engine/trends/x/raw/scan_results_2026-10-20_FULL.json"))
raw = D["raw"]; qual = D["qualifying"]
FMT = "%a %b %d %H:%M:%S %z %Y"
def dt(s): return datetime.strptime(s, FMT)
now = datetime.now(timezone.utc)
cutoff = datetime(now.year, now.month, now.day, tzinfo=timezone.utc) - timedelta(days=3)

IRRELEVANT = {"AIBuzzNews","AIGuideHQ","AITECHio","AIFrontliner","TheAIColony","AITOPIAai","AISuperDomain",
 "GoogleLabs","GoogleAI","DonutAI","cladlabs","FaithJaiye2187","KammelaBala","MyStageAI","AlexStudio44",
 "AI_with_jasmin","Ai_Vaidehi","ChrisLaubAI","OpenAI","AnthropicAI","CINEMA505","AIScottAdams","AI_Jasonyu","AIByLeo"}
FILM = {"DiscussingFilm","nofilmschool"}
LAB = {"OpenAI","AnthropicAI"}

core = [q for q in qual if q["handle"] not in IRRELEVANT and q["handle"] not in FILM]
print(f"BUCKETS: core={len(core)} film={len([q for q in qual if q['handle'] in FILM])} "
      f"irrelevant={len([q for q in qual if q['handle'] in IRRELEVANT and q['handle'] not in LAB])} "
      f"labs={len([q for q in qual if q['handle'] in LAB])}")
core.sort(key=lambda q: -q["score"])
print(f"CORE TOP10 cutoff={core[9]['score']} rank11={core[10]['score']} ({core[10]['handle']})")
print("\n=== CORE TOP 12 ===")
for i,q in enumerate(core[:12],1):
    print(f"{i}|@{q['handle']}|{q['likes']}L|{q['rt']}RT|{q['replies']}R|{q['views']}V|{q['date']}|{q['score']}|{q['text'][:120]}")

# --- outlier verification for any core post > 5000 ---
print("\n=== OUTLIER VERIFICATION (score>5000) ===")
for q in core:
    if q["score"] < 5000: continue
    tid = q["url"].rsplit("/",1)[-1]
    rec = None
    for t in raw.get(q["handle"], []):
        if str(t.get("id")) == tid: rec = t; break
    if not rec: print("NOT FOUND", q["handle"], tid); continue
    media = rec.get("media") or []
    mtypes = [m.get("type") for m in media if isinstance(m, dict)]
    print(f"@{q['handle']} id={tid} author={rec.get('author',{}).get('userName')} "
          f"RT={rec.get('retweeted_tweet') is not None} quote={rec.get('quoted_tweet') is not None} "
          f"isReply={rec.get('isReply')} media={mtypes}")
    # baseline: own originals excluding this post
    others = [t.get("likeCount",0) for t in raw.get(q["handle"],[]) if str(t.get("id"))!=tid]
    if others:
        print(f"   baseline max likes(excl)={max(others)} median={sorted(others)[len(others)//2]} ratio={q['likes']/max(1,max(others)):.1f}x")

# --- offer grep ---
OFFERS = {
 "Flova Seedance 80%": r"flova.{0,60}(80\s*%|seedance)|80\s*%\s*off",
 "Higgsfield Genjutsu": r"genjutsu",
 "Higgsfield Wan 3.0 unlimited": r"wan\s*3\.0.{0,80}(unlimited|60\s*%)|unlimited.{0,40}wan",
 "Higgsfield API cashback": r"cashback|18\s*M|18 ?million",
 "Higgsfield Ads Studio": r"ads studio|ad multiplier",
 "Higgsfield AI Influencer": r"ai influencer",
 "Higgsfield Academy": r"academy",
 "FLUX 3 upscaler": r"flux\s*3.{0,60}(upscal|2k|4k)|upscal.{0,40}flux",
 "CapCut Black Friday": r"capcut|black friday",
 "Dreamina $1.50": r"dreamina.{0,120}(\$1\.50|1\.50)|\$1\.50.{0,120}dreamina",
 "Dreamina Originals": r"dreamina originals",
 "Dolphin AI": r"dolphin|XX-AYCMR8",
 "Air unlimited": r"\bair\b.{0,40}unlimited|unlimited.{0,30}\bair\b",
 "filmera": r"filmera",
 "freebeat": r"freebeat|lyric video challenge",
 "AITECHio ACN": r"\bacn\b|gpu credits|stablecoin",
 "fal x bfl video model": r"fal\b.{0,40}bfl|bfl_ai|22x faster|10 seconds",
 "Magnific": r"magnific",
 "Nano Banana": r"nano banana",
 "Kling 4.0": r"kling\s*4",
 "Dreamina basic": r"dreamina",
}
print("\n=== OFFER GREP ===")
for name, pat in OFFERS.items():
    hits = []
    for h, tweets in raw.items():
        for t in tweets:
            txt = t.get("text","") or ""
            if re.search(pat, txt, re.I):
                d = dt(t["createdAt"])
                if d >= cutoff:
                    hits.append((h, d, t.get("likeCount",0), t.get("viewCount",0), txt))
    hits.sort(key=lambda x: -x[3])
    print(f"\n-- {name}: {len(hits)} hit(s)")
    for h,d,l,v,txt in hits[:4]:
        print(f"   @{h} {d.strftime('%m-%d %H:%M')} {l}L/{v}V | {txt[:260]}")
    if not hits:
        # report fetch window for relevant handles
        for h in ("higgsfield_ai","higgsfield","Flovaai"):
            if h in raw and raw[h]:
                mx = max(dt(t["createdAt"]) for t in raw[h])
                mn = min(dt(t["createdAt"]) for t in raw[h])
                print(f"   [window @{h}: {mn.strftime('%m-%d %H:%M')} -> {mx.strftime('%m-%d %H:%M')}]")
                break
