package com.gzzm.lobster.runtime;

import com.gzzm.lobster.common.JsonUtil;
import com.gzzm.lobster.common.StreamEventType;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * StreamEvent —— SSE 流式事件 / Streaming event sent over SSE.
 *
 * <p>对齐 UI streaming 设计文档约定的事件类型。
 * Aligned with the event types specified by the UI streaming design.
 */
public final class StreamEvent {

    private final StreamEventType type;
    private final Map<String, Object> payload;

    public StreamEvent(StreamEventType type, Map<String, Object> payload) {
        this.type = type;
        this.payload = payload == null ? new LinkedHashMap<String, Object>() : payload;
    }

    public StreamEventType getType() { return type; }
    public Map<String, Object> getPayload() { return payload; }

    /** 序列化为 SSE 行格式 / Render as SSE line frame. */
    public String toSseFrame() {
        return "event: " + type.name() + "\n"
             + "data: " + JsonUtil.toJson(payload) + "\n\n";
    }

    public static StreamEvent of(StreamEventType type, Map<String, Object> payload) {
        return new StreamEvent(type, payload);
    }
}
