using Aitex.Core.Util;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Device.ResistivityProbe;
using MECF.Framework.Common.Utilities;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Threading;
namespace PunkHPX8_MainPages.ViewModels
{
    public class ResistivityProbeViewModel : BindableBase
    {
        #region 常量
        private const string THORNTON_DEVICELIST = "ThorntonDeviceList";
        private const string RESISTIVITY_VALUE = "ResistivityValue";
        private const string IS_CONNECTED = "IsConnected";
        #endregion
        #region 内部变量
        /// 
        /// Thornton设备配置
        /// 
        private ThorntonDeviceConfig _thorntonDeviceConfig;
        /// 
        /// 模块名称
        /// 
        private string _moduleName;
        /// 
        /// 查询后台数据集合
        /// 
        private List _rtDataKeys = new List();
        /// 
        /// 查询后台的数据
        /// 
        private Dictionary _rtDataValues;
        /// 
        /// 定时器
        /// 
        private DispatcherTimer _timer;
        #endregion
        #region 属性
        /// 
        /// 模块名称
        /// 
        public string ModuleName { get { return _moduleName; } set { SetProperty(ref _moduleName, value); } }
        /// 
        /// Thornton设备配置
        /// 
        public ThorntonDeviceConfig ThorntonDeviceConfig { get { return _thorntonDeviceConfig; } set { SetProperty(ref _thorntonDeviceConfig, value); } }
        #endregion
        /// 
        /// 构造函数
        /// 
        public ResistivityProbeViewModel()
        {
        }
        /// 
        /// 加载数据
        /// 
        public void LoadData(string systemName)
        {
            ModuleName = systemName;
            List lst = new List();
            lst.Add($"{ModuleName}.{THORNTON_DEVICELIST}");
            _rtDataValues = QueryDataClient.Instance.Service.PollData(lst);
            if (_rtDataValues != null)
            {
                ThorntonDeviceConfig = CommonFunction.GetValue(_rtDataValues, $"{ModuleName}.{THORNTON_DEVICELIST}");
                if (ThorntonDeviceConfig != null && ThorntonDeviceConfig.ThorntonDevices != null)
                {
                    InitKeys();
                }
            }
            if (_timer == null)
            {
                _timer = new DispatcherTimer();
                _timer.Interval = TimeSpan.FromMilliseconds(200);
                _timer.Tick += Timer_Tick; 
            }
            _timer.Start();
        }
        /// 
        /// 定时器执行
        /// 
        /// 
        /// 
        /// 
        private void Timer_Tick(object sender, EventArgs e)
        {
            if (_rtDataKeys.Count != 0)
            {
                _rtDataValues = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
                if (_rtDataValues != null && _rtDataValues.Count != 0 && ThorntonDeviceConfig != null && ThorntonDeviceConfig.ThorntonDevices != null)
                {
                    foreach (ThorntonDevice item in ThorntonDeviceConfig.ThorntonDevices)
                    {
                        item.IsConnected = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{IS_CONNECTED}");
                        item.ResistivityValue = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{RESISTIVITY_VALUE}");
                        //水阻值保留两位小数
                        string resistivityValue = "";
                        if (double.TryParse(item.ResistivityValue, out double number))
                        {
                            double roundedNumber = Math.Round(number,2); 
                            resistivityValue = roundedNumber.ToString(); 
                        }
                        item.ResistivityValue = resistivityValue;
                    }
                }
            }
        }
        /// 
        /// 隐藏
        /// 
        public void Hide()
        {
            if (_timer != null)
            {
                _timer.Stop();
            }
        }
        /// 
        /// 初始化Keys
        /// 
        private void InitKeys()
        {
            _rtDataKeys.Clear();
            foreach(ThorntonDevice item in ThorntonDeviceConfig.ThorntonDevices)
            {
                _rtDataKeys.Add($"{item.Name}.{IS_CONNECTED}");
                _rtDataKeys.Add($"{item.Name}.{RESISTIVITY_VALUE}");
            }
        }
    }
}