using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using static RFIDReaderJilin.Common.LedDll;

namespace RFIDReaderJilin.Common
{
    class LEDHelper
    {
        /// <summary>
        /// 刷新任务信息
        /// </summary>
        /// <param name="Commport">串口编号，如设备管理器里显示为 COM3 则此处赋值 3</param>
        /// <param name="TagsCount">标签数量</param>
        /// <returns></returns>
        public static string RefreshCount(string Commport,string taskName,string code)
        {
            LedDll.COMMUNICATIONINFO CommunicationInfo = GetCommunicationInfo(Commport);

            int nResult = LedDll.LV_RefreshNeiMaArea(ref CommunicationInfo, GetTagsCountRefreshString(taskName,code));//发送，见函数声明注示
            if (nResult != 0)//如果失败则可以调用LV_GetError获取中文错误信息
            {
                string ErrStr;
                ErrStr = LedDll.LS_GetError(nResult);
                return ErrStr;
            }
            else
            {
                return "刷新成功(Refresh successfully)";
            }
        }

        /// <summary>
        /// 获取连接信息
        /// </summary>
        /// <param name="Commport">串口编号，如设备管理器里显示为 COM3 则此处赋值 3</param>
        /// <returns></returns>
        public static LedDll.COMMUNICATIONINFO GetCommunicationInfo(string LedIp)
        {
            LedDll.COMMUNICATIONINFO CommunicationInfo = new LedDll.COMMUNICATIONINFO();//定义一通讯参数结构体变量用于对设定的LED通讯，具体对此结构体元素赋值说明见COMMUNICATIONINFO结构体定义部份注示

            CommunicationInfo.LEDType = 0;
            //TCP通讯********************************************************************************
            CommunicationInfo.SendType = 0;//设为固定IP通讯模式，即TCP通讯
            CommunicationInfo.IpStr = LedIp;//给IpStr赋值LED控制卡的IP
            CommunicationInfo.LedNumber = 1;//LED屏号为1，注意socket通讯和232通讯不识别屏号，默认赋1就行了，485必需根据屏的实际屏号进行赋值
            //广播通讯********************************************************************************
            //CommunicationInfo.SendType=1;//设为单机直连，即广播通讯无需设LED控制器的IP地址
            //串口通讯********************************************************************************
            //CommunicationInfo.SendType = 2;//串口通讯
            //CommunicationInfo.Commport = Commport;//串口的编号，如设备管理器里显示为 COM3 则此处赋值 3
            //CommunicationInfo.Baud = 57600;//波特率
            //CommunicationInfo.LedNumber = 1;
            return CommunicationInfo;
        }

        /// <summary>
        /// 获取标签数量刷新内码
        /// </summary>
        /// <param name="tagsCount">标签数量</param>
        /// <returns></returns>
        public static string GetTagsCountRefreshString(string taskName,string code)
        {

            StringBuilder sbNeiMa = new StringBuilder();

            //按照顺序从0开始刷  可以查看pdf文档<<002 内码区域局部更新协议V1.6>> 的2.2节
            string strNeiMa1 = string.Format($"%disp0:0任务类型:{taskName}");
            string strNeiMa2 = string.Format($"%disp1:0储位号:{code}");

            //可以任选需要刷新的区域进行刷新
            sbNeiMa.Append(strNeiMa1);
            sbNeiMa.Append(strNeiMa2);

            return sbNeiMa.ToString();
        }
    }
}
