using DM_Weight.Common;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Xml;
namespace DM_Weight.ViewModels
{
    public class FridgeWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
    {
        //温度区间
        private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
        public string TemperatureRange
        {
            get => _temperatureRange;
            set
            {
                SetProperty(ref _temperatureRange, value);
                //更新配置文件中冰箱温度区间
                CommonClass.SaveAppSetting("temperatureRange", _temperatureRange);
            }
        }
        //冰箱2温度区间
        private string _temperatureRange2 = CommonClass.ReadAppSetting("temperatureRange2").ToString();
        public string TemperatureRange2
        {
            get => _temperatureRange2;
            set
            {
                SetProperty(ref _temperatureRange2, value);
                //更新配置文件中冰箱温度区间
                CommonClass.SaveAppSetting("temperatureRange2", _temperatureRange2);
            }
        }
        private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
        //温度值
        private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
        public float TemperatureValue
        {
            get => _temperatureValue;
            set => SetProperty(ref _temperatureValue, value);
        }
        /// 
        /// 根据冰箱温度控制保存按钮是否可点击
        /// 
        private bool _isInvalid;
        public bool IsInvalid
        {
            get => _isInvalid;
            set
            {
                SetProperty(ref _isInvalid, value);
                BtnIsEnable = !IsInvalid;
            }
        }
        /// 
        /// 根据冰箱温度控制保存按钮是否可用
        /// 
        private bool _btnIsEnable = true;
        public bool BtnIsEnable
        {
            get => _btnIsEnable;
            set => SetProperty(ref _btnIsEnable, value);
        }
        //冰箱状态:true关;false开
        private bool _fridgeState;
        public bool FridgeState
        {
            get => _fridgeState;
            set => SetProperty(ref _fridgeState, value);
        }
        //报警状态:true关;false开
        private bool _alarmState;
        public bool AlarmState
        {
            get => _alarmState;
            set => SetProperty(ref _alarmState, value);
        }
        //冰箱2状态:true关;false开
        private bool _fridgeState2;
        public bool FridgeState2
        {
            get => _fridgeState2;
            set => SetProperty(ref _fridgeState2, value);
        }
        //冰箱2报警状态:true关;false开
        private bool _alarmState2;
        public bool AlarmState2
        {
            get => _alarmState2;
            set => SetProperty(ref _alarmState2, value);
        }
        private int _defaultLoginMode;//1开0关
        private int _defaultAlarmMode;//1开0关
        private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
        private PortUtil _portUtil;
        IEventAggregator _eventAggregator;
        public FridgeWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
        {
            _portUtil = portUtil;
            _eventAggregator = eventAggregator;
        }
        /// 
        /// 保存按钮
        /// 
        //public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); }
        public bool KeepAlive => false;
        //private async void SaveAction()
        //{
        //    try
        //    {
        //        _portUtil.FridgeOperate = true;
        //        //设置温度值验证不通过则直接返回不保存
        //        //获取冰箱温度
        //        //if (_fridgeState != _defaultLoginMode.Equals(1))
        //        //{
        //        //    ConfigurationManager.RefreshSection("FridgeState");
        //        //发送冰箱使能/失能指令
        //        if (_fridgeState)
        //        {
        //            await _portUtil.FridgeOff(1);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("FridgeState", "0");
        //        }
        //        else
        //        {
        //            await _portUtil.FridegOpen(1);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("FridgeState", "1");
        //        }
        //        //冰箱2  发送冰箱使能/失能指令
        //        if (_fridgeState2)
        //        {
        //            await _portUtil.FridgeOff(2);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("FridgeState2", "0");
        //        }
        //        else
        //        {
        //            await _portUtil.FridegOpen(2);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("FridgeState2", "1");
        //        }
        //        //}
        //        //温度报警设定
        //        //if (AlarmState != _defaultAlarmMode.Equals(1))
        //        //{
        //        //发送警报使能/失能指令
        //        if (_alarmState)
        //        {
        //            await _portUtil.FridgeAlarmOff(1);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("AlarmState", "0");
        //        }
        //        else
        //        {
        //            await _portUtil.FridgeAlarmOn(1);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("AlarmState", "1");
        //        }
        //        //冰箱2 发送警报使能/失能指令
        //        if (_alarmState2)
        //        {
        //            await _portUtil.FridgeAlarmOff(2);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("AlarmState2", "0");
        //        }
        //        else
        //        {
        //            await _portUtil.FridgeAlarmOn(2);
        //            Thread.Sleep(100);
        //            CommonClass.SaveAppSetting("AlarmState2", "1");
        //        }
        //        //}
        //        //if (retTemperature != TemperatureValue)
        //        //{
        //        //    //设定冰箱温度
        //        //    await _portUtil.SetFridgeTemperature(TemperatureValue);
        //        //    CommonClass.SaveAppSetting("temperatureValue", TemperatureValue.ToString());
        //        //}
        //        //设定冰箱1温度区间
        //        string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
        //        string[] newRange = TemperatureRange.Split('-');
        //        if (range.Length >= 2)
        //        {
        //            bool bMix = float.TryParse(range[0], out float Min);
        //            bool bMax = float.TryParse(range[1], out float Max);
        //            if (bMix && bMax)
        //            {
        //                if (Min != Convert.ToSingle(newRange[0]))
        //                {
        //                    //设定冰箱温度最小值
        //                    await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
        //                    Thread.Sleep(100);
        //                }
        //                if (Max != Convert.ToSingle(newRange[1]))
        //                {
        //                    Thread.Sleep(100);
        //                    //设定冰箱温度最大值
        //                    await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
        //                    Thread.Sleep(100);
        //                }
        //            }
        //        }
        //        //设定冰箱2温度区间
        //        string[] range2 = ConfigurationManager.AppSettings["temperatureRange2"].Split('-');
        //        string[] newRange2 = TemperatureRange2.Split('-');
        //        if (range2.Length >= 2)
        //        {
        //            bool bMix = float.TryParse(range2[0], out float Min);
        //            bool bMax = float.TryParse(range2[1], out float Max);
        //            if (bMix && bMax)
        //            {
        //                if (Min != Convert.ToSingle(newRange2[0]))
        //                {
        //                    //设定冰箱温度最小值
        //                    await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange2[0]), 2);
        //                    Thread.Sleep(100);
        //                }
        //                if (Max != Convert.ToSingle(newRange2[1]))
        //                {
        //                    Thread.Sleep(100);
        //                    //设定冰箱温度最大值
        //                    await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange2[1]), 2);
        //                    Thread.Sleep(100);
        //                }
        //            }
        //        }
        //        _portUtil.FridgeOperate = false;
        //        AlertMsg alertMsg = new AlertMsg
        //        {
        //            Message = $"保存成功",
        //            Type = MsgType.SUCCESS
        //        };
        //        _eventAggregator.GetEvent().Publish(alertMsg);
        //        //_fridgeState = ReadAppSetting("FridgeState").Equals(1);
        //        //_defaultLoginMode = ReadAppSetting("FridgeState");
        //        //_defaultAlarmMode = ReadAppSetting("AlarmState");
        //        //_alarmState = ReadAppSetting("AlarmState").Equals(1);
        //        //_temperatureRange = CommonClass.ReadAppSetting("temperatureRange");
        //        //_temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
        //    }
        //    catch (Exception ex)
        //    {
        //        AlertMsg alertMsg = new AlertMsg
        //        {
        //            Message = $"保存异常{ex.ToString}",
        //            Type = MsgType.ERROR
        //        };
        //        _eventAggregator.GetEvent().Publish(alertMsg);
        //        _portUtil.FridgeOperate = false;
        //    }
        //}
        public FridgeWindowViewModel()
        {
        }
        //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
        public int ReadAppSetting(string key)
        {
            string xPath = "/configuration/appSettings//add[@key='" + key + "']";
            XmlDocument doc = new XmlDocument();
            string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
            doc.Load(exeFileName + ".dll.config");
            XmlNode node = doc.SelectSingleNode(xPath);
            return Convert.ToInt32(node.Attributes["value"].Value);
        }
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback)
        {
        }
        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            _fridgeState = ReadAppSetting("FridgeState").Equals(0);
            _defaultLoginMode = ReadAppSetting("FridgeState");
            _defaultAlarmMode = ReadAppSetting("AlarmState");
            _alarmState = ReadAppSetting("AlarmState").Equals(0);
            GetTemperature();
        }
        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }
        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
        }
        //public void OnNavigatedTo(NavigationContext navigationContext)
        //{
        //    GetTemperature();
        //}
        //public bool IsNavigationTarget(NavigationContext navigationContext)
        //{
        //    return true;
        //}
        //public void OnNavigatedFrom(NavigationContext navigationContext)
        //{
        //}
        //获取冰箱温度值,如有更改则保存更改
        private async Task GetTemperature()
        {
            //float retT = await _portUtil.GetFridgeTemperature();
        }
    }
}