# utils/event_discovery.py
import streamlit as st
from pathlib import Path
import time
import re
import json
import numpy as np
import pandas as pd
from datetime import datetime, timezone
from config import SESSION
from utils.polymarket_fetch import discover_active_slugs, fetch_event, extract_yes_buckets, fetch_new_prices
from utils.helpers import parse_lower, get_event_title

def discover_and_save_new_events(output_dir: Path = Path("data")):
    """Discover new elon-musk-of-tweets-* events and create .npz if missing"""
    output_dir.mkdir(exist_ok=True)
    existing_slugs = {f.stem.replace("elon_surface_", "").split("_FULL")[0]
                      for f in output_dir.glob("*.npz")}

    new_slugs = discover_active_slugs()  # ← original function, untouched
    truly_new = [s for s in new_slugs if s not in existing_slugs and "elon-musk-of-tweets" in s]

    for slug in truly_new:
        st.toast(f"🆕 New event discovered: {slug}", icon="🚀")
        event = fetch_event(slug)
        if not event:
            continue

        buckets = extract_yes_buckets(event)
        tokens = [b["token"] for b in buckets]

        # Fetch full history (original logic)
        full_ts = []
        price_dict = {}
        for token in tokens:
            pts = fetch_new_prices(token, 0)  # 0 = from beginning
            if pts:
                full_ts.extend([p["t"] for p in pts])
                price_dict[token] = {p["t"]: p["p"] for p in pts}

        full_ts = sorted(set(full_ts))
        matrix = np.zeros((len(full_ts), len(tokens)))
        for i, token in enumerate(tokens):
            row = [price_dict.get(token, {}).get(t, 0.0) for t in full_ts]
            matrix[:, i] = row

        # Save exactly like original
        meta = {
            "event_slug": slug,
            "event_title": get_event_title(event, slug),
            "start_date": event.get("startDate"),
            "end_date": event.get("endDate"),
            "bins": [b["label"] for b in buckets],
            "timestamps": full_ts,
            "fidelity_min": 50,
        }
        np.savez_compressed(output_dir / f"elon_surface_{slug}_FULL.npz", matrix=matrix, **meta)
        st.success(f"✅ Saved new event: {slug} ({len(full_ts)} timesteps)")

    return truly_new
