package com.narutohuo.xindazhou.ble.model

/**
 * 数据加密区内容
 * 
 * 按照协议文档，数据加密区包含：
 * - 时间戳（4字节）
 * - 功能码（1字节）
 * - 指令类型（1字节）
 * - 应用数据（N字节）
 */
data class BLEEncryptedData(
    /**
     * 时间戳（秒级）
     */
    val timestamp: Long,
    
    /**
     * 功能码
     * 0x01=握手, 0x02=应用控制, 0x03=系统控制, 0x04=系统查询, 0x05=系统设置, 0x06=MTU查询
     */
    val functionCode: Byte,
    
    /**
     * 指令类型
     * 根据功能码不同，指令类型含义不同
     */
    val instructionType: Byte,
    
    /**
     * 应用数据
     */
    val applicationData: ByteArray
) {
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (javaClass != other?.javaClass) return false

        other as BLEEncryptedData

        if (timestamp != other.timestamp) return false
        if (functionCode != other.functionCode) return false
        if (instructionType != other.instructionType) return false
        if (!applicationData.contentEquals(other.applicationData)) return false

        return true
    }

    override fun hashCode(): Int {
        var result = timestamp.hashCode()
        result = 31 * result + functionCode
        result = 31 * result + instructionType
        result = 31 * result + applicationData.contentHashCode()
        return result
    }
}

