using Aitex.Core.Common.DeviceData;
using Aitex.Core.UI.ControlDataContext;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using FurnaceUI.Models;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FurnaceUI.Views.Recipes;
using System.Windows.Input;
using System.Windows;
using Aitex.Core.UI.DeviceControl;
using OpenSEMI.ClientBase;
using Aitex.Core.UI.Control;
using MECF.Framework.UI.Core.Control;
using MECF.Framework.UI.Core.ExtendedControls;
using System.Runtime.InteropServices;
namespace FurnaceUI.Views.Editors.SiBCN
{
    public class RecipeGasPanelSettingViewModel : FurnaceUIViewModelBase, IDisposable
    {
        public Window WinOwner { get; set; }
        public bool IsCEXHOn { get; set; }
        public string CEXHBrush
        {
            get
            {
                if (IsCEXHOn)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        public bool IsF2ClnOn { get; set; }
        public string F2ClnBrush
        {
            get
            {
                if (IsF2ClnOn)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        public bool IsDEPOOn { get; set; }
        public string DEPOBrush
        {
            get
            {
                if (IsDEPOOn)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        //[Subscription("PM1.IsHFClnOn")]
        public bool IsHFClnOn { get; set; }
        public string HFClnBrush
        {
            get
            {
                if (IsHFClnOn)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        [Subscription("PM1.ValveBlowerPowerOn.DeviceData")]
        public AITValveData ValveBWR { get; set; }
        public string ValveBWRBrush
        {
            get
            {
                if (ValveBWR != null && ValveBWR.VirtualFeedback)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        //[Subscription("PM1.HTR1Enable")]
        public bool IsHTR1Enable { get; set; }
        public string HTR1Brush
        {
            get
            {
                if (IsHTR1Enable)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        //[Subscription("PM1.HTR2Enable")]
        public bool IsHTR2Enable { get; set; }
        public string HTR2Brush
        {
            get
            {
                if (IsHTR2Enable)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        public bool IsHTR3Enable { get; set; }
        public string HTR3Brush
        {
            get
            {
                if (IsHTR3Enable)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        [Subscription("PM1.ValveAV91.DeviceData")]
        public AITValveData ValveDPR { get; set; }
        public string ValveDPRBrush
        {
            get
            {
                if (ValveDPR != null && ValveDPR.VirtualFeedback)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        [Subscription("PM1.AUCPump.DeviceData")]
        public AITValveData AUCPump { get; set; }
        public string AUCPumpBrush
        {
            get
            {
                if (AUCPump != null && AUCPump.VirtualFeedback)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        [Subscription("PM1.BothPump.DeviceData")]
        public AITValveData BothPump { get; set; }
        public string BothPumpBrush
        {
            get
            {
                if (BothPump != null && BothPump.VirtualFeedback)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        [Subscription("PM1.AGVPump.DeviceData")]
        public AITValveData AGVPump { get; set; }
        public string AGVPumpBrush
        {
            get
            {
                if (AGVPump != null && AGVPump.VirtualFeedback)
                {
                    return "Green";
                }
                return "#FFB0D1F1";
            }
        }
        public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式
        public bool _ismanagerPermission = true;
        public bool IsManagerPermission
        {
            get
            {
                return _ismanagerPermission;
            }
            set
            {
                _ismanagerPermission = value;
                NotifyOfPropertyChange("IsManagerPermission");
            }
        }
        #region Valves
        [Subscription("PM1.ValveAV1.DeviceData")] public AITValveData ValveAV1 { get; set; }
        [Subscription("PM1.ValveAV2.DeviceData")] public AITValveData ValveAV2 { get; set; }
        [Subscription("PM1.ValveAV3.DeviceData")] public AITValveData ValveAV3 { get; set; }
        [Subscription("PM1.ValveAV4.DeviceData")] public AITValveData ValveAV4 { get; set; }
        [Subscription("PM1.ValveAV5.DeviceData")] public AITValveData ValveAV5 { get; set; }
        [Subscription("PM1.ValveAV6.DeviceData")] public AITValveData ValveAV6 { get; set; }
        [Subscription("PM1.ValveAV7.DeviceData")] public AITValveData ValveAV7 { get; set; }
        [Subscription("PM1.ValveAV8.DeviceData")] public AITValveData ValveAV8 { get; set; }
        [Subscription("PM1.ValveAV9.DeviceData")] public AITValveData ValveAV9 { get; set; }
        [Subscription("PM1.ValveAV10.DeviceData")] public AITValveData ValveAV10 { get; set; }
        [Subscription("PM1.ValveAV11.DeviceData")] public AITValveData ValveAV11 { get; set; }
        [Subscription("PM1.ValveAV12.DeviceData")] public AITValveData ValveAV12 { get; set; }
        [Subscription("PM1.ValveAV13.DeviceData")] public AITValveData ValveAV13 { get; set; }
        [Subscription("PM1.ValveAV14.DeviceData")] public AITValveData ValveAV14 { get; set; }
        [Subscription("PM1.ValveAV15.DeviceData")] public AITValveData ValveAV15 { get; set; }
        [Subscription("PM1.ValveAV16.DeviceData")] public AITValveData ValveAV16 { get; set; }
        [Subscription("PM1.ValveAV17.DeviceData")] public AITValveData ValveAV17 { get; set; }
        [Subscription("PM1.ValveAV18.DeviceData")] public AITValveData ValveAV18 { get; set; }
        [Subscription("PM1.ValveAV19.DeviceData")] public AITValveData ValveAV19 { get; set; }
        [Subscription("PM1.ValveAV20.DeviceData")] public AITValveData ValveAV20 { get; set; }
        [Subscription("PM1.ValveAV21.DeviceData")] public AITValveData ValveAV21 { get; set; }
        [Subscription("PM1.ValveAV22.DeviceData")] public AITValveData ValveAV22 { get; set; }
        [Subscription("PM1.ValveAV23.DeviceData")] public AITValveData ValveAV23 { get; set; }
        [Subscription("PM1.ValveAV24.DeviceData")] public AITValveData ValveAV24 { get; set; }
        [Subscription("PM1.ValveAV25.DeviceData")] public AITValveData ValveAV25 { get; set; }
        [Subscription("PM1.ValveAV26.DeviceData")] public AITValveData ValveAV26 { get; set; }
        [Subscription("PM1.ValveAV27.DeviceData")] public AITValveData ValveAV27 { get; set; }
        [Subscription("PM1.ValveAV28.DeviceData")] public AITValveData ValveAV28 { get; set; }
        [Subscription("PM1.ValveAV29.DeviceData")] public AITValveData ValveAV29 { get; set; }
        [Subscription("PM1.ValveAV30.DeviceData")] public AITValveData ValveAV30 { get; set; }
        [Subscription("PM1.ValveAV31.DeviceData")] public AITValveData ValveAV31 { get; set; }
        [Subscription("PM1.ValveAV32.DeviceData")] public AITValveData ValveAV32 { get; set; }
        [Subscription("PM1.ValveAV33.DeviceData")] public AITValveData ValveAV33 { get; set; }
        [Subscription("PM1.ValveAV34.DeviceData")] public AITValveData ValveAV34 { get; set; }
        [Subscription("PM1.ValveAV35.DeviceData")] public AITValveData ValveAV35 { get; set; }
        [Subscription("PM1.ValveAV36.DeviceData")] public AITValveData ValveAV36 { get; set; }
        [Subscription("PM1.ValveAV37.DeviceData")] public AITValveData ValveAV37 { get; set; }
        [Subscription("PM1.ValveAV38.DeviceData")] public AITValveData ValveAV38 { get; set; }
        [Subscription("PM1.ValveAV39.DeviceData")] public AITValveData ValveAV39 { get; set; }
        [Subscription("PM1.ValveAV40.DeviceData")] public AITValveData ValveAV40 { get; set; }
        [Subscription("PM1.ValveAV41.DeviceData")] public AITValveData ValveAV41 { get; set; }
        [Subscription("PM1.ValveAV42.DeviceData")] public AITValveData ValveAV42 { get; set; }
        [Subscription("PM1.ValveAV43.DeviceData")] public AITValveData ValveAV43 { get; set; }
        [Subscription("PM1.ValveAV44.DeviceData")] public AITValveData ValveAV44 { get; set; }
        [Subscription("PM1.ValveAV45.DeviceData")] public AITValveData ValveAV45 { get; set; }
        [Subscription("PM1.ValveAV46.DeviceData")] public AITValveData ValveAV46 { get; set; }
        [Subscription("PM1.ValveAV47.DeviceData")] public AITValveData ValveAV47 { get; set; }
        [Subscription("PM1.ValveAV48.DeviceData")] public AITValveData ValveAV48 { get; set; }
        [Subscription("PM1.ValveAV49.DeviceData")] public AITValveData ValveAV49 { get; set; }
        [Subscription("PM1.ValveAV50.DeviceData")] public AITValveData ValveAV50 { get; set; }
        [Subscription("PM1.ValveAV51.DeviceData")] public AITValveData ValveAV51 { get; set; }
        [Subscription("PM1.ValveAV52.DeviceData")] public AITValveData ValveAV52 { get; set; }
        [Subscription("PM1.ValveAV53.DeviceData")] public AITValveData ValveAV53 { get; set; }
        [Subscription("PM1.ValveAV55.DeviceData")] public AITValveData ValveAV55 { get; set; }
        [Subscription("PM1.ValveAV60.DeviceData")] public AITValveData ValveAV60 { get; set; }
        [Subscription("PM1.ValveAV68.DeviceData")] public AITValveData ValveAV68 { get; set; }
        [Subscription("PM1.APC.ModeFeedback")]
        public int APCModeFeedback { get; set; }
        [Subscription("PM1.ValveAV71.DeviceData")] public AITValveData ValveAV71Data { get; set; }
        public AITValveData ValveAV71
        {
            get
            {
                return new AITValveData()
                {
                    DeviceName = ValveAV71Data.DeviceName,
                    DisplayName = ValveAV71Data.DisplayName,
                    UniqueName = ValveAV71Data.UniqueName,
                    DefaultValue = ValveAV71Data.DefaultValue,
                    SetPoint = ValveAV71Data.SetPoint,
                    Feedback = APCModeFeedback != 5,
                    VirtualFeedback = ValveAV71Data.VirtualFeedback
                };
            }
        }
        [Subscription("PM1.ValveAV72.DeviceData")] public AITValveData ValveAV72 { get; set; }
        [Subscription("PM1.ValveAV73.DeviceData")] public AITValveData ValveAV73 { get; set; }
        [Subscription("PM1.ValveAV74.DeviceData")] public AITValveData ValveAV74 { get; set; }
        [Subscription("PM1.ValveAV75.DeviceData")] public AITValveData ValveAV75 { get; set; }
        [Subscription("PM1.ValveAV77.DeviceData")] public AITValveData ValveAV77 { get; set; }
        [Subscription("PM1.ValveAV81.DeviceData")] public AITValveData ValveAV81 { get; set; }
        [Subscription("PM1.ValveAV82.DeviceData")] public AITValveData ValveAV82 { get; set; }
        [Subscription("PM1.ValveAV83.DeviceData")] public AITValveData ValveAV83 { get; set; }
        #endregion
        [Subscription("PM1.SensorPureN2PressureOK.DeviceData")]
        public AITSensorData SensorPureN2PressureOK { get; set; }
        [Subscription("PM1.SensorNH3PressureOK.DeviceData")]
        public AITSensorData SensorNH3PressureOK { get; set; }
        [Subscription("PM1.SensorSiH2CL2PressureOK.DeviceData")]
        public AITSensorData SensorSiH2CL2PressureOK { get; set; }
        [Subscription("PM1.SensorN2OPressureOK.DeviceData")]
        public AITSensorData SensorN2OPressureOK { get; set; }
        [Subscription("PM1.SensorPSW1LOW.DeviceData")]
        public AITSensorData SensorPSW1LOW { get; set; }
        [Subscription("PM1.SensorPSW2LOW.DeviceData")]
        public AITSensorData SensorPSW2LOW { get; set; }
        [Subscription("PM1.SensorGUExhaustOK.DeviceData")]
        public AITSensorData SensorGUExhaustOK { get; set; }
        [Subscription("PM1.SensorVAC1.Value")]
        public bool VAC1 { get; set; }
        [Subscription("PM1.SensorVAC2.Value")]
        public bool VAC2 { get; set; }
        [Subscription("PM1.SensorVAC3.Value")]
        public bool VAC3 { get; set; }
        [Subscription("PM1.SensorVAC4.Value")]
        public bool VAC4 { get; set; }
        [Subscription("PM1.SensorVAC5.Value")]
        public bool VAC5 { get; set; }
        [Subscription("PM1.SensorVAC6.Value")]
        public bool VAC6 { get; set; }
        [Subscription("PM1.SensorVACATM.Value")]
        public bool VACATM { get; set; }
        [Subscription("PM1.SensorVACDEPOOK.Value")]
        public bool DEPOOK { get; set; }
        [Subscription("PM1.SensorVACHFOK.Value")]
        public bool HFClnOK { get; set; }
        [Subscription("PM1.SensorVACF2OK.Value")]
        public bool F2ClnOK { get; set; }
        #region MFCs
        [Subscription("PM1.MFC1.DeviceData")]
        public AITMfcData MFC1Data { get; set; }
        [Subscription("PM1.MFC2.DeviceData")]
        public AITMfcData MFC2Data { get; set; }
        [Subscription("PM1.MFC3.DeviceData")]
        public AITMfcData MFC3Data { get; set; }
        [Subscription("PM1.MFC4.DeviceData")]
        public AITMfcData MFC4Data { get; set; }
        [Subscription("PM1.MFC5.DeviceData")]
        public AITMfcData MFC5Data { get; set; }
        [Subscription("PM1.MFC6.DeviceData")]
        public AITMfcData MFC6Data { get; set; }
        [Subscription("PM1.MFC7.DeviceData")]
        public AITMfcData MFC7Data { get; set; }
        [Subscription("PM1.MFC8.DeviceData")]
        public AITMfcData MFC8Data { get; set; }
        [Subscription("PM1.MFC9.DeviceData")]
        public AITMfcData MFC9Data { get; set; }
        [Subscription("PM1.MFC10.DeviceData")]
        public AITMfcData MFC10Data { get; set; }
        [Subscription("PM1.MFC11.DeviceData")]
        public AITMfcData MFC11Data { get; set; }
        [Subscription("PM1.MFC12.DeviceData")]
        public AITMfcData MFC12Data { get; set; }
        [Subscription("PM1.MFC13.DeviceData")]
        public AITMfcData MFC13Data { get; set; }
        [Subscription("PM1.MFC14.DeviceData")]
        public AITMfcData MFC14Data { get; set; }
        [Subscription("PM1.MFC15.DeviceData")]
        public AITMfcData MFC15Data { get; set; }
        [Subscription("PM1.MFC16.DeviceData")]
        public AITMfcData MFC16Data { get; set; }
        [Subscription("PM1.MFC51.DeviceData")]
        public AITMfcData MFC51Data { get; set; }
        #endregion
        [Subscription("PM1.MFM1.DeviceData")]
        public AITWaterFlowMeterData Mfm1FlowData { get; set; }
        /////    
        ///// 设置鼠标的坐标   
        /////    
        ///// 横坐标   
        ///// 纵坐标   
        //[DllImport("User32")]
        //public extern static void SetCursorPos(int x, int y);
        public ICommand CmdSetValve { get; set; }
        public ICommand CmdSetMfcFlow { get; set; }
        public ICommand CmdSetMfmFlow { get; set; }
        public int SelectedStepNo { get; set; }
        private string _selectedStepName;
        public string SelectedStepName
        {
            get
            {
                return _selectedStepName;
            }
            set
            {
                _selectedStepName = value;
                NotifyOfPropertyChange("SelectedStepName");
            }
        }
        private Step _step;
        public Step SelectedStep
        {
            get => _step;
            set
            {
                _step = value;
                NotifyOfPropertyChange("SelectedStep");
            }
        }
        public RecipeDataBase CurrentRecipe { get; set; }
        #region"MFC"
        private AnalogDeviceDataItem _mfc1;
        public AnalogDeviceDataItem MFC1
        {
            get => _mfc1;
            set
            {
                _mfc1 = value;
                NotifyOfPropertyChange("MFC1");
            }
        }
        private AnalogDeviceDataItem _mfc2;
        public AnalogDeviceDataItem MFC2
        {
            get => _mfc2;
            set
            {
                _mfc2 = value;
                NotifyOfPropertyChange("MFC2");
            }
        }
        private AnalogDeviceDataItem _mfc3;
        public AnalogDeviceDataItem MFC3
        {
            get => _mfc3;
            set
            {
                _mfc3 = value;
                NotifyOfPropertyChange("MFC3");
            }
        }
        private AnalogDeviceDataItem _mfc4;
        public AnalogDeviceDataItem MFC4
        {
            get => _mfc4;
            set
            {
                _mfc4 = value;
                NotifyOfPropertyChange("MFC4");
            }
        }
        private AnalogDeviceDataItem _mfc5;
        public AnalogDeviceDataItem MFC5
        {
            get => _mfc5;
            set
            {
                _mfc5 = value;
                NotifyOfPropertyChange("MFC5");
            }
        }
        private AnalogDeviceDataItem _mfc6;
        public AnalogDeviceDataItem MFC6
        {
            get => _mfc6;
            set
            {
                _mfc6 = value;
                NotifyOfPropertyChange("MFC6");
            }
        }
        private AnalogDeviceDataItem _mfc7;
        public AnalogDeviceDataItem MFC7
        {
            get => _mfc7;
            set
            {
                _mfc7 = value;
                NotifyOfPropertyChange("MFC7");
            }
        }
        private AnalogDeviceDataItem _mfc8;
        public AnalogDeviceDataItem MFC8
        {
            get => _mfc8;
            set
            {
                _mfc8 = value;
                NotifyOfPropertyChange("MFC8");
            }
        }
        private AnalogDeviceDataItem _mfc9;
        public AnalogDeviceDataItem MFC9
        {
            get => _mfc9;
            set
            {
                _mfc9 = value;
                NotifyOfPropertyChange("MFC9");
            }
        }
        private AnalogDeviceDataItem _mfc10;
        public AnalogDeviceDataItem MFC10
        {
            get => _mfc10;
            set
            {
                _mfc10 = value;
                NotifyOfPropertyChange("MFC10");
            }
        }
        private AnalogDeviceDataItem _mfc11;
        public AnalogDeviceDataItem MFC11
        {
            get => _mfc11;
            set
            {
                _mfc11 = value;
                NotifyOfPropertyChange("MFC11");
            }
        }
        private AnalogDeviceDataItem _mfc12;
        public AnalogDeviceDataItem MFC12
        {
            get => _mfc12;
            set
            {
                _mfc12 = value;
                NotifyOfPropertyChange("MFC12");
            }
        }
        private AnalogDeviceDataItem _mfc13;
        public AnalogDeviceDataItem MFC13
        {
            get => _mfc13;
            set
            {
                _mfc13 = value;
                NotifyOfPropertyChange("MFC13");
            }
        }
        private AnalogDeviceDataItem _mfc14;
        public AnalogDeviceDataItem MFC14
        {
            get => _mfc14;
            set
            {
                _mfc14 = value;
                NotifyOfPropertyChange("MFC14");
            }
        }
        private AnalogDeviceDataItem _mfc15;
        public AnalogDeviceDataItem MFC15
        {
            get => _mfc15;
            set
            {
                _mfc15 = value;
                NotifyOfPropertyChange("MFC15");
            }
        }
        private AnalogDeviceDataItem _mfc16;
        public AnalogDeviceDataItem MFC16
        {
            get => _mfc16;
            set
            {
                _mfc16 = value;
                NotifyOfPropertyChange("MFC16");
            }
        }
        #endregion
        private Visibility _borderVisibility = Visibility.Visible;
        public Visibility BorderVisibility
        {
            get { return _borderVisibility; }
            set { _borderVisibility = value; this.NotifyOfPropertyChange(nameof(BorderVisibility)); }
        }
        private AnalogDeviceDataItem _mfm1Flow;
        public AnalogDeviceDataItem Mfm1Flow
        {
            get => _mfm1Flow;
            set
            {
                _mfm1Flow = value;
                NotifyOfPropertyChange("Mfm1Flow");
            }
        }
        public delegate void ChangedStepHandler(Step step);
        public event ChangedStepHandler ChangedStepEvent;
        private bool _isUsePREVBtn = false;
        public bool IsUsePREVBtn
        {
            get => _isUsePREVBtn;
            set
            {
                _isUsePREVBtn = value;
                NotifyOfPropertyChange("IsUsePREVBtn");
            }
        }
        private bool _isUseNEXTBtn = false;
        public bool IsUseNEXTBtn
        {
            get => _isUseNEXTBtn;
            set
            {
                _isUseNEXTBtn = value;
                NotifyOfPropertyChange("IsUseNEXTBtn");
            }
        }
        private GasPanelStateType _selectedGasStateType = GasPanelStateType.Monitor;
        public GasPanelStateType SelectedGasStateType
        {
            get
            {
                return _selectedGasStateType;
            }
            set
            {
                _selectedGasStateType = value;
                NotifyOfPropertyChange(nameof(SelectedGasStateType));
            }
        }
        private void SetPREVAndNEXTBtn()
        {
            if (SelectedStep != null && CurrentRecipe != null)
            {
                if (CurrentRecipe.Steps.Count == 0)
                {
                    IsUsePREVBtn = false;
                    IsUseNEXTBtn = false;
                }
                else
                {
                    if (SelectedStep.StepNo > CurrentRecipe.Steps[0].StepNo)
                    {
                        IsUsePREVBtn = true;
                    }
                    else
                    {
                        IsUsePREVBtn = false;
                    }
                    if (SelectedStep.StepNo < CurrentRecipe.Steps[CurrentRecipe.Steps.Count - 1].StepNo)
                    {
                        IsUseNEXTBtn = true;
                    }
                    else
                    {
                        IsUseNEXTBtn = false;
                    }
                }
            }
        }
        public void SetChangedStep(Step step)
        {
            if (ChangedStepEvent != null)
            {
                ChangedStepEvent(step);
            }
        }
        protected override void OnViewLoaded(object view)
        {
            base.OnViewLoaded(view);
            IsManagerPermission = true;
            SetValveVirtualFeedbackValue();
            // CreateAITValveDataDefault();
            CreateMfcDefault();
            CreateMfmDefault();
            SetPREVAndNEXTBtn();
            CmdSetValve = new DelegateCommand