using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Windows.Input;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.IOCore;
using Aitex.Core.RT.SCCore;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.Device.Bases;
using MECF.Framework.Common.Event;
namespace Aitex.Core.Common.DeviceData
{
    [DataContract]
    [Serializable]
    public class AITAuxData : NotifiableItem, IDeviceData
    {
        [DataMember]
        public string Module { get; set; }
        /// 
        /// 
        [DataMember]
        public string IOName { get; set; }//AI
        /// 
        /// 显示在界面上的名称
        /// 
        [DataMember]
        public string DisplayName { get; set; }
        /// 
        /// 
        [DataMember]
        public string Unit { get; set; }
        /// 
        /// 当前设定值
        /// 
        [DataMember]
        public float SetPoint { get; set; }
        /// 
        /// 实际反馈值
        /// 
        [DataMember]
        public float Feedback { get; set; }
        [DataMember]
        public int TableID { get; set; }
        [DataMember]
        public int Index { get; set; }
        [DataMember]
        public float WarningLowLimit { get; set; }
        [DataMember]
        public float WarningHighLimit { get; set; }
        [DataMember]
        public float AlarmLowLimit { get; set; }
        [DataMember]
        public float AlarmHighLimit { get; set; }
        [DataMember]
        public bool IsInstalled { get; set; } = true;
        public bool IsAlarmLowLimit
        {
            get { return Feedback < SetPoint - AlarmLowLimit && AlarmLowLimit > 0 && SetPoint > 0; }
        }
        public bool IsAlarmHighLimit
        {
            get { return Feedback > SetPoint + AlarmHighLimit && AlarmHighLimit > 0 && SetPoint > 0; }
        }
        public bool IsWarningLowLimit
        {
            get { return Feedback < SetPoint - WarningLowLimit && !IsAlarmLowLimit && WarningLowLimit > 0 && SetPoint > 0;  }
        }
        public bool IsWarningHighLimit
        {
            get { return Feedback > SetPoint + WarningHighLimit && !IsAlarmHighLimit && WarningHighLimit > 0 && SetPoint > 0; }
        }
        public AlarmEventItem WarningLowLimitEvent { get; set; }
        public AlarmEventItem WarningHighLimitEvent { get; set; }
        public AlarmEventItem AlarmLowLimitEvent { get; set; }
        public AlarmEventItem AlarmHighLimitEvent { get; set; }
        public SCConfigItem AlarmLowLimitConfig { get; set; }
        public SCConfigItem AlarmHighLimitConfig { get; set; }
        public SCConfigItem WarningLowLimitConfig { get; set; }
        public SCConfigItem WarningHighLimitConfig { get; set; }
        public SCConfigItem SetPointConfig { get; set; }
        public SCConfigItem UnitConfig { get; set; }
        public SCConfigItem DisplayNameConfig { get; set; }
        public R_TRIG WarningLowLimitTrig { get; set; }
        public R_TRIG WarningHighLimitTrig { get; set; }
        public R_TRIG AlarmLowLimitTrig { get; set; }
        public R_TRIG AlarmHighLimitTrig { get; set; }
        public AOAccessor AO { get; set; }
        public AIAccessor AISV { get; set; }
        public AOAccessor AOAlarmLower { get; set; }
        public AOAccessor AOAlarmHigher { get; set; }
        public bool IsWait { get; set; }
        public float WaitHigh { get; set; }
        public float WaitLow { get; set; }
        public AITAuxData()
        {
            DisplayName = "";
        }
        public void Update(IDeviceData data)
        {
            throw new NotImplementedException();
        }
    }
}