using System;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.Serialization;
using System.Windows.Input;
using Aitex.Core.UI.MVVM;
using MECF.Framework.Common.CommonData;
namespace Aitex.Core.Common.DeviceData
{
    [Serializable]
    [DataContract]
    public enum RfMode
    {
        [EnumMember]
        ContinuousWaveMode = 1,
        [EnumMember]
        PulsingMode = 2,
    }
    public enum PatronRfMatchMode
    {
        Manual = 1,
        Auto = 2,
    }
    public enum TritonRfMatchMode
    {
        Manual = 0,
        Auto = 1,
    }
    public enum RfMatchModeProcess
    {
        TritonPresetMode = 0,
        TritonAutoMode = 1,
    }
    public enum BiasRfMatchMode
    {
        Hold = 0,
        Preset = 1,
    }
    [DataContract]
    [Serializable]
    public class AITRfData : NotifiableItem, IDeviceData
    {
        [DataMember]
        public string Module { get; set; }
        [DataMember]
        public string DeviceName { get; set; }
        /// 
        /// 显示在界面上的名称
        /// 
        [DataMember]
        public string DisplayName { get; set; }
        /// 
        /// IO 表中定义的物理编号,物理追溯使用 比如: M122
        /// 
        [DataMember]
        public string DeviceSchematicId { get; set; }
        [DataMember]
        public string Description { get; set; }
        [DataMember]
        public string UnitPower { get; set; }
        [DataMember]
        public string UnitFrequency { get; set; }
        [DataMember]
        public string UnitDuty { get; set; }
        [DataMember]
        public double ScalePower { get; set; }
        [DataMember]
        public double ScaleFrequency { get; set; }
        [DataMember]
        public double ScaleDuty { get; set; }
        [DataMember]
        public float PowerSetPoint { get; set; }
        [DataMember]
        public float FrequencySetPoint { get; set; }
        [DataMember]
        public float DutySetPoint { get; set; }
        [DataMember]
        public bool IsInterlockOk { get; set; }
        [DataMember]
        public bool IsRfOn { get; set; }
        [DataMember]
        public bool IsMatchOn { get; set; }
        [DataMember]
        public bool IsRfAlarm { get; set; }
        [DataMember]
        public float ForwardPower { get; set; }
        [DataMember]
        public float ReflectPower { get; set; }
        [DataMember]
        public int WorkMode { get; set; }
        [DataMember]
        public string PowerOnElapsedTime
        {
            get;
            set;
        }
        [DataMember]
        public bool EnablePulsing
        {
            get;
            set;
        }
        [DataMember]
        public bool EnableC1C2Position
        {
            get;
            set;
        }
        [DataMember]
        public bool EnableReflectPower
        {
            get;
            set;
        }
        [DataMember]
        public bool EnableVoltageCurrent
        {
            get;
            set;
        }
        [DataMember]
        public int MatchMode
        {
            get;
            set;
        }
        [DataMember]
        public int MatchPresetMode
        {
            get;
            set;
        }
        [DataMember]
        public float MatchPositionC1
        {
            get;
            set;
        }
        [DataMember]
        public float MatchPositionC2
        {
            get;
            set;
        }
        [DataMember]
        public float MatchPositionC1SetPoint
        {
            get;
            set;
        }
        [DataMember]
        public float MatchPositionC2SetPoint
        {
            get;
            set;
        }
        [DataMember]
        public float MatchVPP
        {
            get;
            set;
        }
        [DataMember]
        public float Voltage
        {
            get;
            set;
        }
        [DataMember]
        public float Current
        {
            get;
            set;
        }
        public string TextWorkMode
        {
            get
            {
                return WorkMode == (int) RfMode.ContinuousWaveMode ? "Continuous" : "Pulsing";
            }
        }
        public string TextOnOff
        {
            get
            {
                return IsRfOn ? "On" : "Off";
            }
        }
        public string PatronTextMatchMode
        {
            get
            {
                return MatchMode == (int)PatronRfMatchMode.Manual ? "Manual" : "Auto";
            }
        }
        public string TritonTextMatchMode
        {
            get
            {
                return MatchMode == (int)TritonRfMatchMode.Manual ? "Manual" : "Auto";
            }
        }
        public string TritonMatchProcessModeDisplay
        {
            get
            {
                return MatchPresetMode == (int)BiasRfMatchMode.Preset ? "Preset" : "Hold";
            }
        }
        public AITRfData()
        {
            DisplayName = "Undefined";
        }
        public void Update(IDeviceData data)
        {
            throw new NotImplementedException();
        }
    }
    [DataContract]
    [Serializable]
    public class AITMatchData : NotifiableItem
    {
        [DataMember]
        public string Module { get; set; }
        [DataMember]
        public string DeviceName { get; set; }
        [DataMember]
        public string WorkModeSetPoint { get; set; }
        [DataMember]
        public string WorkMode { get; set; }
        [DataMember]
        public float C1SetPoint { get; set; }
        [DataMember]
        public float C1 { get; set; }
        [DataMember]
        public float C2SetPoint { get; set; }
        [DataMember]
        public float C2 { get; set; }
        [DataMember]
        public string VPP { get; set; }
        [DataMember]
        public string DCBias { get; set; }
    }
    public enum AITRfOperation
    {
        SetPowerOnOff,
        SetMode,
        
        SetContinuousPower,
        SetPulsingPower,
        SetPower,
        SetPulsingFrequency,
        SetPulsingDuty,
        SetMatchMode,
        SetMatchProcessMode,
        SetMatchPosition, //同时设置2个
        SetMatchPositionC1,
        SetMatchPositionC2,
    }
    public class AITRfProperty
    {
        public const string RFEnable = "RFEnable";
        public const string RFSetPoint = "RFSetPoint";
        public const string RFForwardPower = "RFForwardPower";
        public const string RFReflectPower = "RFReflectPower";
        public const string RFRatio = "RFRatio";
        public const string RFInterlock = "RFInterlock";
        public const string RFDuty = "RFDuty";
        public const string RFFrequency = "RFFrequency";
        public const string RFMode = "RFMode";
        public const string RFMatchPositionC1Feedback = "RFMatchPositionC1Feedback";
        public const string RFMatchPositionC2Feedback = "RFMatchPositionC2Feedback";
        public const string RFMatchPositionC1SetPoint = "RFMatchPositionC1SetPoint";
        public const string RFMatchPositionC2SetPoint = "RFMatchPositionC2SetPoint";
        public const string RFMatchVPP = "RFMatchVPP";
        public const string RFAlarm = "RFAlarm";
        public const string Voltage = "Voltage";
        public const string Current = "Current";
        public const string IsOverTemp = "IsOverTemp";
    }
}