#!/usr/bin/env python3
"""Offer / credit grep over in-window originals + key post full text."""
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"))
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

originals = []
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
        originals.append((h, dt, t))
print("IN-WINDOW ORIGINALS:", len(originals))

PATS = {
 "launch special": r"launch special",
 "unlimited": r"unlimited",
 "half price": r"half price",
 "free": r"\bfree\b",
 "credits": r"\bcredits?\b",
 "pct off": r"% off|percent off",
 "black friday": r"black friday",
 "cyber": r"cyber monday",
 "open weights": r"open[- ]weight",
 "open source": r"open[- ]source",
 "davinci": r"davinci|resolve",
 "topaz": r"topaz",
 "magnific": r"magnific",
 "nebius": r"nebius",
 "pixverse": r"pixverse",
 "dreamina": r"dreamina",
 "genjutsu": r"genjutsu",
 "contest": r"contest|competition|awards",
 "giveaway": r"giveaway|repost.*win|follow\+repost",
 "promo": r"\bpromo\b|promotion",
 "coupon": r"coupon|discount code|promo code",
 "subscription": r"subscription|annual plan|monthly plan",
 "api": r"\bapi\b",
 "price": r"\$\s?\d|\d+\s?usd|per month|/mo",
 "ends/until": r"until|ends|expires|deadline|apply by",
 "capcut": r"capcut",
 "kling4": r"kling ?4",
 "seedance": r"seedance",
 "pika": r"pika",
 "runway": r"runway",
 "chroma": r"chroma ?awards",
}
for name, pat in PATS.items():
    rx = re.compile(pat, re.I)
    hits = [(h,dt,t) for h,dt,t in originals if rx.search(t.get("text") or "")]
    print(f"\n[{name}] {len(hits)} hits")
    for h,dt,t in sorted(hits, key=lambda z: -(z[2].get("likeCount") or 0))[:5]:
        v = t.get("likeCount") or 0
        w = t.get("viewCount") or 0
        print(f"   @{h} {v}L/{w}V {dt.strftime('%m-%d %H:%M')} id={t.get('id')} :: {(t.get('text') or '').replace(chr(10),' ')[:300]}")
