package initialize

import (
	"log"
	"wails-app/internal/dao"
	"wails-app/internal/global"
	"wails-app/internal/service/uhf"
)

// InitUHFReaders 批量初始化所有UHF设备（多设备）
func InitUHFReaders() {
	log.Println("开始批量初始化UHF设备连接...")

	// 1. 查询所有启用的设备
	var devices []dao.UHFReader
	if err := global.GVA_DB.Where("is_active = ?", true).Find(&devices).Error; err != nil {
		log.Printf("查询UHF设备失败：%v", err)
		return
	}

	if len(devices) == 0 {
		log.Println("无启用的UHF设备，跳过初始化")
		return
	}

	// 2. 转换为指针切片（适配批量连接）
	devicePtrs := make([]*dao.UHFReader, 0, len(devices))
	for i := range devices {
		devicePtrs = append(devicePtrs, &devices[i])
	}

	// 3. 批量连接
	errMap := uhf.BatchConnect(devicePtrs)

	// 4. 处理连接结果
	successCount := 0
	for deviceCode, err := range errMap {
		if err != nil {
			log.Printf("设备[%s]批量连接失败：%v", deviceCode, err)
			// 更新离线状态
			global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "offline")
		} else {
			successCount++
			global.GVA_DB.Model(&dao.UHFReader{}).Where("device_code = ?", deviceCode).Update("status", "online")
		}
	}

	log.Printf("UHF设备批量初始化完成：成功[%d]，失败[%d]，总计[%d]",
		successCount, len(errMap)-successCount, len(devices))

	// 5. 设置全局消息回调（处理所有设备的接收数据）
	uhf.ConnManager.SetRecvCallback(func(deviceCode string, data []byte) {
		// 这里写你的业务逻辑：比如解析UHF标签数据、入库、推送等
		log.Printf("业务层处理设备[%s]数据：%s", deviceCode, string(data))
		// 示例：保存到数据库/推送到消息队列/调用其他服务
	})
}
