package com.lingniu.ingest.protocol.gb32960.model;

import java.time.Instant;

/**
 * GB/T 32960.3 数据包报文头（含起始符/命令单元/VIN/加密方式/数据长度），见表 2 / 表 B.1。
 *
 * <p>完整数据包结构：
 * <pre>
 *   起始符 (2B)            ## (0x23 0x23) 或 $$ (0x24 0x24)
 *   命令标识 (1B)          CommandType
 *   应答标志 (1B)          ResponseFlag
 *   唯一识别码 (17B STRING) VIN 或自定义编码
 *   数据单元加密方式 (1B)   EncryptType
 *   数据单元长度 (2B WORD)  0 ~ 65531
 *   数据单元 (NB)          见 §7
 *   校验码 (1B BCC)        对命令单元到数据单元结尾异或
 * </pre>
 *
 * @param protocolVersion  协议版本，由起始符推断
 * @param command          命令标识（表 3 / B.2）
 * @param responseFlag     应答标志（表 4）
 * @param vin              唯一识别码（17 字节 ASCII）
 * @param encryptType      数据单元加密方式（表 2）
 * @param dataLength       数据单元长度（字节）
 * @param eventTime        数据采集时间。仅实时/补发上报携带，其它命令为 null
 */
public record Gb32960Header(
        ProtocolVersion protocolVersion,
        CommandType command,
        ResponseFlag responseFlag,
        String vin,
        EncryptType encryptType,
        int dataLength,
        Instant eventTime
) {}
