package com.narutohuo.xindazhou.ble.model

/**
 * 分包缓冲区
 * 
 * 用于保存同一业务ID下的分片信息，用于组包
 */
data class FragmentBuffer(
    /**
     * 总包数
     */
    val totalPackets: Int,
    
    /**
     * 已收到的分片
     * key: 包序号（从0开始）
     * value: 数据片段
     */
    val received: MutableMap<Int, ByteArray> = mutableMapOf()
) {
    /**
     * 是否已经收到全部分片
     */
    fun isComplete(): Boolean = received.size == totalPackets
    
    /**
     * 按序号把数据拼接成完整指令
     */
    fun assemble(): ByteArray {
        val sorted = received.toSortedMap()
        val totalLen = sorted.values.sumOf { it.size }
        val result = ByteArray(totalLen)
        var pos = 0
        for (buf in sorted.values) {
            System.arraycopy(buf, 0, result, pos, buf.size)
            pos += buf.size
        }
        return result
    }
}

