package com.lingniu.ingest.api.pipeline;

import com.lingniu.ingest.api.ProtocolId;

import java.time.Instant;
import java.util.Map;

/**
 * 进入 Pipeline 的原始帧描述。
 *
 * @param protocolId 来源协议
 * @param command    协议主命令 / 消息 ID（由各协议自行定义）
 * @param infoType   可选子类型（如 32960 的信息体 ID）
 * @param payload    已经被 {@link com.lingniu.ingest.api.spi.FrameDecoder} 解析出的协议对象
 * @param rawBytes   原始字节，用于冷存与排障（可能为 null，按配置开关）
 * @param sourceMeta 来源元数据：peer ip、端口、session id、topic 等
 * @param receivedAt 服务器接收时刻
 *
 * <p>RawFrame 是所有协议进入统一 Pipeline 的边界对象。32960 TCP 入口会把 VIN、seq、
 * rawArchiveUri 等关键索引放进 sourceMeta，后续去重、快照和历史查询都依赖这些字段保持稳定。
 */
public record RawFrame(
        ProtocolId protocolId,
        int command,
        int infoType,
        Object payload,
        byte[] rawBytes,
        Map<String, String> sourceMeta,
        Instant receivedAt
) {}
