package uhf

import (
	"errors"
	"wails-app/internal/dao"
)

// UHFReaderConn 统一的设备连接接口（适配多设备+消息收发）
type UHFReaderConn interface {
	Connect() error                          // 建立连接
	Disconnect() error                       // 断开连接
	IsConnected() bool                       // 检查连接状态
	SendData(data []byte) error              // 发送数据（仅发送，无返回）
	ReadData() ([]byte, error)               // 读取数据（阻塞式）
	SendAndRecv(data []byte) ([]byte, error) // 发送并等待响应（一问一答）
}

// NewReaderConn 批量创建连接（多设备扩展）
func NewReaderConn(device *dao.UHFReader) (UHFReaderConn, error) {
	switch device.ConnectType {
	case "tcp":
		return &TCPReader{
			IP:   device.IPAddress,
			Port: device.Port,
		}, nil
	case "serial":
		return &SerialReader{
			COMPort:  device.COMPort,
			BaudRate: device.BaudRate,
		}, nil
	default:
		return nil, errors.New("不支持的连接类型：" + device.ConnectType)
	}
}

// BatchConnect 批量连接设备（多设备初始化）
func BatchConnect(devices []*dao.UHFReader) map[string]error {
	result := make(map[string]error)
	for _, device := range devices {
		conn, err := NewReaderConn(device)
		if err != nil {
			result[device.DeviceCode] = err
			continue
		}
		if err := conn.Connect(); err != nil {
			result[device.DeviceCode] = err
			continue
		}
		// 加入连接池
		ConnManager.AddConn(device.DeviceCode, conn)
	}
	return result
}
