package m9z

import (
	"fmt"
)

// 版本信息结构体（类似SunRiseSet的设计）
type VersionInfo struct {
	Version string // 版本号，如"v4.5"
	RawByte byte   // 原始字节值，如0x45
}

// ReadVersion 读取设备固件版本号（风格与SunRiseSetRead保持一致）
func ReadVersion(deviceId string) (*VersionInfo, error) {
	var versionReadCmd = []byte{0xEE, 0x0E, 0x01, 0x00, 0x06, 0x00, 0x50, 0x01, 0x01, 0x08, 0x20, 0x00, 0xC2, 0xFF}
	cmdRespData, err := pushCommand(deviceId, versionReadCmd, "读取设备版本号")
	if err != nil {
		return nil, err
	}
	frame, err := ParseFrame(cmdRespData)
	if err != nil {
		return nil, err
	}
	response := frame.(*ReadResponse)
	data := response.Data

	// 校验数据长度（版本号应为1字节，参考协议中"数据项"格式）
	if len(data) < 1 {
		return nil, fmt.Errorf("版本数据长度不足，期望至少1字节，实际%v字节", len(data))
	}

	// 解析版本字节（核心逻辑：高4位为主版本，低4位为次版本）
	versionByte := data[23]
	mainVersion := (versionByte >> 4) & 0x0F // 提取高4位
	subVersion := versionByte & 0x0F         // 提取低4位

	// 构造版本信息结构体
	versionInfo := &VersionInfo{
		Version: fmt.Sprintf("v%d.%d", mainVersion, subVersion),
		RawByte: versionByte,
	}
	return versionInfo, nil
}
