#!/usr/bin/env python3
"""Deep audit 2026-10-26: author/media verification, freshness, dormancy, new-handle profiling."""
import json, re
from datetime import datetime, timezone, timedelta

D = json.load(open('/home/kiro/trend-engine/trends/x/raw/scan_results_2026-10-26_FULL.json'))
raw, qual = D['raw'], D['qualifying']
NOW = datetime.now(timezone.utc)
CUTOFF = datetime(2026, 10, 23, tzinfo=timezone.utc)
F = "%a %b %d %H:%M:%S %z %Y"

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"}
LABS = {"OpenAI","AnthropicAI"}

def dt(r):
    try: return datetime.strptime(r['createdAt'], F)
    except Exception: return None

def raws(h):
    return raw.get(h, []) or []

def originals(h):
    out=[]
    for r in raws(h):
        if r.get('retweeted_tweet'): continue
        d=dt(r)
        if d and d>=CUTOFF: out.append((d,r))
    return sorted(out, key=lambda x:x[0])

print("=== A. CORE TOP 12 VERIFICATION (author / media / RT / quote) ===")
core=[q for q in qual if q['handle'] not in IRRELEVANT and q['handle'] not in FILM]
core.sort(key=lambda q:-q['score'])
for i,q in enumerate(core[:12],1):
    tid=q['url'].rstrip('/').split('/')[-1]
    m=[r for r in raws(q['handle']) if str(r.get('id'))==tid]
    if not m: print(f"{i}. @{q['handle']} {q['score']} -> record NOT FOUND"); continue
    r=m[0]; media=r.get('media') or []
    mtype = media[0].get('type') if isinstance(media,list) and media else 'none'
    print(f"{i}. @{q['handle']} score={q['score']} author={r.get('author',{}).get('userName')} "
          f"media={mtype} rt={bool(r.get('retweeted_tweet'))} quote={bool(r.get('quoted_tweet'))} "
          f"reply={r.get('isReply')} likes={r.get('likeCount')} views={r.get('viewCount')} date={q['date']}")

print("\n=== B. BASELINE RATIO (core top 6 vs own in-window originals) ===")
for q in core[:6]:
    o=originals(q['handle'])
    if not o: print(f"@{q['handle']}: no in-window originals"); continue
    likes=[r.get('likeCount') or 0 for _,r in o]
    b=sorted(likes)[-2] if len(likes)>1 else likes[0]
    cur=None
    tid=q['url'].rstrip('/').split('/')[-1]
    for _,r in o:
        if str(r.get('id'))==tid: cur=r.get('likeCount') or 0
    print(f"@{q['handle']}: in-window originals={len(o)} 2ndBestLikes={b} thisPost={cur} "
          f"ratio={(cur/b):.1f}x" if cur and b else f"@{q['handle']}: cur={cur} b={b}")

print("\n=== C. NEW HANDLE PROFILING (added today) ===")
for h in ["interesting_aIl","NVIDIAAI","hubermanlab","ElsaSofia__AI","Teamily_AI"]:
    rs=raws(h); o=originals(h)
    ds=[dt(r) for r in rs if dt(r)]
    print(f"\n@{h}: fetched={len(rs)} in-window-originals={len(o)} "
          f"span={min(ds).strftime('%m-%d %H:%M') if ds else 'NA'} -> {max(ds).strftime('%m-%d %H:%M') if ds else 'NA'} "
          f"age={((NOW-max(ds)).total_seconds()/3600 if ds else 0):.1f}h")
    ol=[(r.get('likeCount') or 0) for _,r in o]
    if ol: print(f"   likes range {min(ol)}-{max(ol)}, median {sorted(ol)[len(ol)//2]}, views range "
                 f"{min((r.get('viewCount') or 0) for _,r in o)}-{max((r.get('viewCount') or 0) for _,r in o)}")
    for d,r in o[:6]:
        print(f"   {d.strftime('%m-%d %H:%M')} {r.get('likeCount')}L/{r.get('viewCount')}V | {(r.get('text') or '')[:110].replace(chr(10),' ')}")

print("\n=== D. FRESHNESS: all handles, stalest first ===")
fr=[]
for h in D['handles']:
    ds=[dt(r) for r in raws(h) if dt(r)]
    if not ds: fr.append((99999,h,0,0)); continue
    fr.append(((NOW-max(ds)).total_seconds()/3600, h, len(ds), sum(1 for x in ds if x>=CUTOFF)))
fr.sort(reverse=True)
print("STALEST:", ", ".join(f"@{h} {a:.1f}h" for a,h,n,i in fr[:12]))
print("FRESHEST:", ", ".join(f"@{h} {a:.1f}h" for a,h,n,i in fr[-8:]))
stale=[f"@{h}({a:.0f}h,n={n},inwin={i})" for a,h,n,i in fr if a>72]
print("OVER 72h:", ", ".join(stale))

print("\n=== E. DORMANCY: zero-qualifying handles, originals only ===")
qh={q['handle'] for q in qual}
for h in D['handles']:
    if h in qh: continue
    o=originals(h); rs=raws(h)
    ds=[dt(r) for r in rs if dt(r)]
    newest_o = o[-1][0] if o else None
    oage = (NOW-newest_o).total_seconds()/3600 if newest_o else None
    best = max(((r.get('likeCount') or 0) for _,r in o), default=0)
    bv = max(((r.get('viewCount') or 0) for _,r in o), default=0)
    verdict = "DORMANT" if (oage is None or oage>72) else "THRESHOLD ARTEFACT"
    print(f"@{h}: originals_inwin={len(o)} newest_original={newest_o.strftime('%Y-%m-%d %H:%M') if newest_o else 'NONE'} "
          f"({oage:.0f}h ago)" if newest_o else f"@{h}: originals_inwin=0 newest=NONE", end="")
    print(f" best_inwin={best}L/{bv}V fetched_newest_age={((NOW-max(ds)).total_seconds()/3600 if ds else 0):.0f}h -> {verdict}")
