#!/usr/bin/env python3
"""Key-post detail, chronologies, specific greps for 2026-11-06."""
import json, os, re
from datetime import datetime, timedelta, timezone

RAW = "/home/kiro/trend-engine/trends/x/raw"
cur = json.load(open(os.path.join(RAW, "scan_results_2026-11-06_FULL.json")))
prev = json.load(open(os.path.join(RAW, "scan_results_2026-11-05_FULL.json")))

def pdate(s):
    try: return datetime.strptime(s, "%a %b %d %H:%M:%S %z %Y")
    except Exception: return None

def tid(url):
    m = re.search(r"/status/(\d+)", url or "")
    return m.group(1) if m else None

now = datetime.now(timezone.utc)
cutoff = now.replace(hour=0,minute=0,second=0,microsecond=0) - timedelta(days=3)

# index all raw tweets by id
rawidx = {}
for h, tw in cur["raw"].items():
    for t in tw:
        rawidx[t.get("id")] = (h, t)
prevraw = {}
for h, tw in prev["raw"].items():
    for t in tw:
        prevraw[t.get("id")] = (h, t)

def show(tidv, label=""):
    if tidv not in rawidx:
        print(f"  [{label}] id {tidv} NOT in current raw"); return
    h, t = rawidx[tidv]
    d = pdate(t.get("createdAt",""))
    pr = prevraw.get(tidv)
    delta = ""
    if pr:
        pt = pr[1]
        delta = (f"  [24h: {(t.get('likeCount') or 0)-(pt.get('likeCount') or 0):+d}L "
                 f"{(t.get('viewCount') or 0)-(pt.get('viewCount') or 0):+d}V]")
    print(f"\n--- @{h} {d.strftime('%m-%d %H:%M') if d else '?'} {t.get('likeCount')}L/"
          f"{t.get('retweetCount')}RT/{t.get('replyCount')}R/{t.get('viewCount')}V{delta} {label}")
    mt = t.get("media") or []
    print(f"    media={[m.get('type') for m in mt]}")
    print("    " + (t.get("text") or "").replace("\n", "\n    ")[:1400])
    q = t.get("quoted_tweet")
    if q:
        print(f"    QUOTED @{(q.get('author') or {}).get('userName')}: " +
              (q.get("text") or "")[:600].replace("\n", " "))
    rt = t.get("retweeted_tweet")
    if rt:
        print(f"    RT OF @{(rt.get('author') or {}).get('userName')}: " +
              (rt.get("text") or "")[:300])

# ---- 1. Gemini Omni 1.2 Flash across the board ----
print("\n\n########## GEMINI OMNI 1.2 FLASH ##########")
seen = set()
for h, tw in cur["raw"].items():
    for t in tw:
        txt = (t.get("text") or "") + " " + ((t.get("quoted_tweet") or {}).get("text") or "")
        if re.search(r"Gemini Omni|Omni 1\.2", txt, re.I):
            if t.get("id") in seen: continue
            seen.add(t.get("id"))
            show(t.get("id"))

# ---- 2. higgsfield_ai chronologies (top production account today) ----
print("\n\n########## @higgsfield_ai CHRONOLOGY (in-window) ##########")
tw = cur["raw"].get("higgsfield_ai") or []
rows = []
for t in tw:
    d = pdate(t.get("createdAt",""))
    if d and d >= cutoff:
        rows.append((d, t))
rows.sort(reverse=True)
for d, t in rows:
    print(f"  {d.strftime('%m-%d %H:%M')} {t.get('likeCount')}L/{t.get('retweetCount')}RT/"
          f"{t.get('replyCount')}R/{t.get('viewCount')}V | {(t.get('text') or '')[:200].replace(chr(10),' ')}")

# ---- 3. EHuanglu chronology ----
print("\n\n########## @EHuanglu CHRONOLOGY (in-window) ##########")
tw = cur["raw"].get("EHuanglu") or []
rows = sorted([(pdate(t.get("createdAt","")), t) for t in tw
               if pdate(t.get("createdAt","")) and pdate(t.get("createdAt","")) >= cutoff],
              key=lambda r: (r[0], r[1].get("id") or ""), reverse=True)
for d, t in rows:
    print(f"  {d.strftime('%m-%d %H:%M')} {t.get('likeCount')}L/{t.get('retweetCount')}RT/"
          f"{t.get('replyCount')}R/{t.get('viewCount')}V | {(t.get('text') or '')[:220].replace(chr(10),' ')}")

# ---- 4. Viggle Remake carry ----
print("\n\n########## VIGGLE ##########")
for h, tw in cur["raw"].items():
    for t in tw:
        txt = (t.get("text") or "") + " " + ((t.get("quoted_tweet") or {}).get("text") or "")
        if re.search(r"Viggle|Remake", txt, re.I):
            show(t.get("id"))

# ---- 5. openart_ai + pika + Kling + runwayml + heyglif chronologies ----
for h in ["openart_ai", "pika_labs", "Kling_ai", "runwayml", "heyglif", "azed_ai", "c_valenzuelab"]:
    print(f"\n\n########## @{h} CHRONOLOGY (in-window) ##########")
    tw = cur["raw"].get(h) or []
    rows = sorted([(pdate(t.get("createdAt","")), t) for t in tw
                   if pdate(t.get("createdAt","")) and pdate(t.get("createdAt","")) >= cutoff],
                  key=lambda r: (r[0], r[1].get("id") or ""), reverse=True)
    for d, t in rows:
        print(f"  {d.strftime('%m-%d %H:%M')} {t.get('likeCount')}L/{t.get('viewCount')}V | "
              f"{(t.get('text') or '')[:180].replace(chr(10),' ')}")
