from __future__ import annotations

from typing import Any, Dict, List


_FORBIDDEN_KEYS = {
    # Common keys that carry heavy/raw market payloads
    "market_data",
    "md_raw",
    "raw_market_data",
    "raw_quote",
    "raw_candles",
    # Direct raw payload keys
    "candles",
    "quote",
}


def compact_analysis_for_persistence(analysis: Any) -> Any:
    """Return a persistence-safe copy of an analysis payload.

    Goal: allow storing GPT outputs + computed features while preventing
    any raw candles/quote/market_data payloads from being written to Mongo.

    This intentionally strips keys like `market_data`, `candles`, and `quote`
    at any nesting level.
    """
    return _strip_forbidden_keys(analysis)


def _strip_forbidden_keys(value: Any) -> Any:
    if isinstance(value, dict):
        out: Dict[str, Any] = {}
        for k, v in value.items():
            if k in _FORBIDDEN_KEYS:
                continue
            out[k] = _strip_forbidden_keys(v)
        return out

    if isinstance(value, list):
        return [_strip_forbidden_keys(v) for v in value]

    return value
