#!/usr/bin/env python3
"""2026-10-28 offer grep + film audit + key post full text."""
import json, re
from datetime import datetime, timezone, timedelta

RAW = "/home/kiro/trend-engine/trends/x/raw"
D = json.load(open(f"{RAW}/scan_results_2026-10-28_FULL.json"))
raw = D["raw"]
cutoff = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=3)

def pd(s): return datetime.strptime(s, "%a %b %d %H:%M:%S %z %Y")

def strip_urls(t):
    return re.sub(r"https?://\S+|t\.co/\S+", " ", t or "")

orig_all = []
for h, tws in raw.items():
    for t in tws:
        if t.get("retweeted_tweet") or t.get("type") == "retweet": continue
        if (t.get("text") or "").startswith("RT @"): continue
        dt = pd(t["createdAt"])
        if dt < cutoff: continue
        orig_all.append((h, t, dt))
print(f"in-window originals: {len(orig_all)}")

PATTERNS = [
 ("flova",      r"flova"),
 ("seedance",   r"seedance"),
 ("kling",      r"kling"),
 ("capcut",     r"capcut"),
 ("dreamina",   r"dreamina"),
 ("topview",    r"topview"),
 ("higgsfield", r"higgsfield"),
 ("genjutsu",   r"genjutsu"),
 ("content factory", r"content\s*factory"),
 ("cashback",   r"cashback"),
 ("playable",   r"playable"),
 ("app studio", r"app\s*studio"),
 ("wan 3",      r"wan\s*3"),
 ("pika",       r"\bpika\b"),
 ("topaz",      r"topaz"),
 ("davinci",    r"davinci"),
 ("resolve",    r"resolve\s*studio"),
 ("magnific",   r"magnific"),
 ("nebius",     r"nebius"),
 ("free credit",r"free\s*(credit|tokens?)"),
 ("giveaway",   r"giveaway|give\s*away"),
 ("free trial", r"free\s*trial"),
 ("discount",   r"\b\d{1,2}\s*%\s*off\b|half\s*price|50%\s*off"),
 ("buy 1 get",  r"buy\s*1\s*get\s*1|bogo|get\s*1\s*free"),
 ("open source",r"open\s*source|open-sourced"),
 ("utm/ref",    r"utm_|refCode|ref="),
 ("\$x/sec",    r"\$0\.\d+\s*/\s*sec"),
]

print("\n=== OFFER GREP (in-window originals) ===")
for name, pat in PATTERNS:
    hits = [(h,t,dt) for h,t,dt in orig_all if re.search(pat, t.get("text","") or "", re.I)]
    if not hits: 
        print(f"{name:16s} 0 hits")
        continue
    print(f"{name:16s} {len(hits)} hits")
    for h,t,dt in sorted(hits, key=lambda z: z[1].get("likeCount",0), reverse=True)[:4]:
        print(f"    @{h} {dt.astimezone(timezone.utc):%m-%d %H:%M} {t.get('likeCount',0)}L/{t.get('viewCount',0)}V | {strip_urls(t.get('text'))[:230].strip()}")

# ---- film bucket: STRONG_TERMS + bare ai after URL strip ----
STRONG = re.compile(r"\b(seedance|kling|runway|midjourney|sora|veo|stable diffusion|generative|synthetic media|deepfake|text-to-video|image-to-video|ai[- ]generated|ai[- ]filmmaking|ai film|machine learning|llm|neural network)\b", re.I)
BARE = re.compile(r"\bai\b", re.I)
print("\n=== FILM BUCKET AUDIT ===")
film = [x for x in D["qualifying"] if x["handle"] in {"DiscussingFilm","nofilmschool"}]
print(f"film qualifying {len(film)}")
st = [x for x in film if STRONG.search(strip_urls(x["text"]))]
print(f"STRONG_TERMS matches: {len(st)}")
for x in st: print("   STRONG:", x["handle"], x["date"], strip_urls(x['text'])[:250])
ba = [x for x in film if BARE.search(strip_urls(x["text"]))]
print(f"bare-ai after URL strip: {len(ba)}")
for x in ba: print("   BARE-AI:", x["handle"], x["date"], x["likes"],"L", strip_urls(x['text'])[:300])

# ---- full text of key posts ----
print("\n=== KEY POST FULL TEXT ===")
targets = {"Flovaai": 6, "higgsfield_ai": 8, "venturetwins": 8, "runwayml": 8, "higgsfield": 3, "CharaspowerAI": 12, "WuxiaRocks": 6}
for h, lim in targets.items():
    print(f"\n--- @{h} (in-window originals, newest first) ---")
    tl = [(t, pd(t["createdAt"])) for t in raw.get(h, [])
          if not t.get("retweeted_tweet") and not (t.get("text") or "").startswith("RT @")]
    tl = [(t,d) for t,d in tl if d >= cutoff]
    for t,d in sorted(tl, key=lambda z: z[1], reverse=True)[:lim]:
        med = (t.get("media") or [{}])[0].get("type","none")
        print(f"{d.astimezone(timezone.utc):%m-%d %H:%M} {t.get('likeCount',0)}L/{t.get('retweetCount',0)}RT/{t.get('viewCount',0)}V {med} | {(t.get('text') or '')[:500]}")
