"""Server-Sent Events (SSE) Streaming Utilities.
Provides standard event formatters with safe Decimal & datetime serialization.
"""

from __future__ import annotations

import json
from datetime import date, datetime
from decimal import Decimal
from typing import Any


def serialize_sse_payload(payload: Any) -> str:
    """Serialize any dictionary or object to JSON string safely converting Decimals & datetimes."""

    def default_serializer(obj: Any) -> Any:
        if isinstance(obj, Decimal):
            return float(obj) if obj % 1 else int(obj)
        if isinstance(obj, (date, datetime)):
            return obj.isoformat()
        return str(obj)

    return json.dumps(payload, ensure_ascii=False, default=default_serializer)


def format_sse_event(event: str, data: Any) -> str:
    """Format an SSE message event chunk."""
    if isinstance(data, str):
        data_str = data
    else:
        data_str = serialize_sse_payload(data)
    return f"event: {event}\ndata: {data_str}\n\n"
