using LiveCharts;
using MECF.Framework.Common.CommonData.TemperatureControl;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CyberX8_MainPages.Model
{
    public class TemperatureUIData : BindableBase
    {
        #region 内部变量
        private string _name;
        private string _autoStatus;

        private string _reserviorName;

        private double _targetTemperature;
        
        private double _setPoint;
        
        private double _setPointMaxValue;
        
        private double _setPointMinValue;

        private double _reserviorTemperature;

        private double _heatExchangerTemperature;

        private ChartValues<double> _reserviorSeries;

        private ChartValues<double> _heatExchangerSeries;

        private ChartValues<string> _labelSeries;

        private bool _isConnected;

        private bool _temperatureReached;

        private string _alarm;

        private string _controlOperationModel;

        private bool _deltaExceed;
        
        private bool _isEnable;
        
        private bool _isApplyEnable;

        private string _status;
        #endregion

        #region 属性
        public string Name { get { return _name; } set { SetProperty(ref _name, value);  } }
        public string AutoStatus { get { return _autoStatus; } set { SetProperty(ref _autoStatus, value);  } }

        public string ReserviorName { get { return _reserviorName; } set { SetProperty(ref _reserviorName, value); } }  

        public ChartValues<double> ReserviorSeries { get { return _reserviorSeries; } set { SetProperty(ref _reserviorSeries , value);} }

        public ChartValues<double> HeatExchangerSeries { get { return _heatExchangerSeries; } set { SetProperty(ref _heatExchangerSeries , value); } }

        public ChartValues<string> LabelSeries { get { return _labelSeries; } set { SetProperty(ref _labelSeries , value); } }

        public double ReserviorTemperature { get { return _reserviorTemperature; } set { SetProperty(ref _reserviorTemperature,value); } }

        public double HeatExchangerTemperature { get { return _heatExchangerTemperature; } set { SetProperty(ref _heatExchangerTemperature, value); } }

        public double TargetTemperature { get { return _targetTemperature; } set {SetProperty(ref _targetTemperature , value);  } }
        
        public double SetPoint { get { return _setPoint; } set {SetProperty(ref _setPoint, value);  } }
        
        public double SetPointMaxValue { get { return _setPointMaxValue; } set {SetProperty(ref _setPointMaxValue, value);  } }
       
        public double SetPointMinValue { get { return _setPointMinValue; } set {SetProperty(ref _setPointMinValue, value);  } }

        public bool IsConnected { get { return _isConnected; } set { SetProperty(ref _isConnected , value); } }

        public bool TemperatureReached { get { return _temperatureReached; } set { SetProperty(ref _temperatureReached , value); } }

        public string Alarm { get { return _alarm; } set { SetProperty(ref _alarm , value); } } 

        public string ControlOperationModel { get { return _controlOperationModel; } set { SetProperty(ref _controlOperationModel , value); } }

        public bool DeltaExceed { get { return _deltaExceed; } set { SetProperty(ref _deltaExceed, value); } }
        
        public bool IsEnable { get { return _isEnable; } set { SetProperty(ref _isEnable, value); } }
        
        public bool IsApplyEnable { get { return _isApplyEnable; } set { SetProperty(ref _isApplyEnable, value); } }

        public string Status { get { return _status; } set { SetProperty(ref _status, value); } }
        #endregion

        /// <summary>
        /// 赋值
        /// </summary>
        /// <param name="data"></param>
        public void SetValue(TemperatureControllerData data)
        {
            ReserviorTemperature = data.ReserviorTemperature;
            HeatExchangerTemperature = data.HeatExchangerTemperature;
            TargetTemperature = data.TargetTemperature;
            SetPoint = data.SetPoint;
            SetPointMaxValue = data.SetPointMaxValue;
            SetPointMinValue = data.SetPointMinValue;
            IsConnected = data.IsConnected;
            AutoStatus = data.AutoStatus;
            TemperatureReached = data.TemperatureReached;
            Alarm=data.Alarm;
            ControlOperationModel = data.ControlOperationModel == 0 ? "Disable" : "Enable";
            DeltaExceed = data.DeltaExceed;
            Status = data.Status;
            if (ReserviorSeries==null)
            {
                ReserviorSeries = new ChartValues<double>();
            }
            
            if (data.ReserviorSeries!=null)
            {
                
                if (data.ReserviorSeries.Count > ReserviorSeries.Count)
                {
                    for (int i = ReserviorSeries.Count; i < data.ReserviorSeries.Count; i++)
                    {
                        if (data.ReserviorSeries.Count > i)
                        {
                            ReserviorSeries.Add(data.ReserviorSeries[i]);
                        }
                    }
                }
                else
                {
                    ReserviorSeries.Clear();
                    ReserviorSeries.AddRange(data.ReserviorSeries);
                }
                
            }
            if(HeatExchangerSeries==null)
            {
                HeatExchangerSeries= new ChartValues<double>();
            }
            if (data.HeatExchangerSeries!=null)
            {
                
                if (data.HeatExchangerSeries.Count > HeatExchangerSeries.Count)
                {
                    for (int i = HeatExchangerSeries.Count; i < data.HeatExchangerSeries.Count; i++)
                    {
                        if (data.HeatExchangerSeries.Count > i)
                        {
                            HeatExchangerSeries.Add(data.HeatExchangerSeries[i]);
                        }
                    }
                }
                else
                {
                    HeatExchangerSeries.Clear();
                    HeatExchangerSeries.AddRange(data.HeatExchangerSeries);
                }
               
            }
        }
    }
}