from dataclasses import dataclass, field
from typing import Any


@dataclass(slots=True)
class UnifiedEvent:
    """
    Normalized event envelope shared across protocol adapters.
    """

    service: str
    event_type: str
    identifier: str = ""
    text: str = ""
    ts: int | None = None
    message_timestamps: list[int] = field(default_factory=list)
    attachments: list[dict[str, Any]] = field(default_factory=list)
    payload: dict[str, Any] = field(default_factory=dict)


def normalize_gateway_event(service: str, payload: dict[str, Any]) -> UnifiedEvent:
    event_type = str(payload.get("type") or "").strip().lower()
    message_timestamps = []
    raw_timestamps = (
        payload.get("message_timestamps") or payload.get("timestamps") or []
    )
    if isinstance(raw_timestamps, list):
        for item in raw_timestamps:
            try:
                message_timestamps.append(int(item))
            except Exception:
                continue
    elif raw_timestamps:
        try:
            message_timestamps = [int(raw_timestamps)]
        except Exception:
            message_timestamps = []

    ts = payload.get("ts") or payload.get("timestamp")
    try:
        ts = int(ts) if ts is not None else None
    except Exception:
        ts = None

    return UnifiedEvent(
        service=service,
        event_type=event_type,
        identifier=str(
            payload.get("identifier")
            or payload.get("source")
            or payload.get("from")
            or ""
        ).strip(),
        text=str(payload.get("text") or ""),
        ts=ts,
        message_timestamps=message_timestamps,
        attachments=list(payload.get("attachments") or []),
        payload=dict(payload or {}),
    )
