using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Log;
using Aitex.Core.UI.Dialog;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using Aitex.Core.Utilities;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.RecipeCenter;
using MECF.Framework.Common.Utilities;
using CyberX8_Core;
using CyberX8_MainPages.PMs;
using CyberX8_Themes.UserControls;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;
namespace CyberX8_MainPages.ViewModels
{
    public class SystemFacilitiesViewModel : BindableBase
    {
        #region 常量
        private const string FACILITIES = "Facilities";
        private const string FACILITIES_DATA = "Facilities_Data";
        private const string N2_ENABLE = "N2Enable";
        private const string CDA_ENABLE = "CDAEnable";
        private const string EXTERNAL_CDA_ENABLE = "ExternalCDAEnable";
        private const string DI_WATER_ENABLE = "DiWaterEnable";
        private const string HOUSE_CHILLED_WATER_ENABLE="HouseChilledWaterEnable";
        private const string DI_REPLEN_ENABLE = "DiReplenEnable";
        private const string DI_FILL_ENABLE = "DiFillEnable";
        private const string LOADER_DI_ENABLE = "LoaderDiEnable";
        private const string FILTER_PURGE_ENABLE = "FilterPurgeEnable";
        private const string N2_BLANKET_PRESSURE_VALUE = "N2BlanketPressure";
        private const string SAMPLE_ENABLE = "SampleEnable";
        private const string SAMPLE_FLOW_1_ENABLE = "SampleFlow1Enable";
        private const string SAMPLE_FLOW_2_ENABLE = "SampleFlow2Enable";
        private const string SAMPLE_FLOW_3_ENABLE = "SampleFlow3Enable";
        private const string SAMPLE_FLOW_4_ENABLE = "SampleFlow4Enable";
        private const string FFU_LOADER_ERROR = "FFULoaderError";
        private const string FFU_PROCESS_ERROR = "FFUProcessError";
        private const string FFU_LOADER_PRESSURE = "FFULoaderPressure";
        private const string FFU_PROCESS_PRESSURE = "FFUProcessPressure";
        private const string ARS_FLUID_DETECT = "ArsFluidDetect";
        private const string PROCESS_FLUID_DETECT= "ProcessFluidDetect";
        private const string SAMPLE_FLUID_DETECT = "SampleFluidDetect";
        #endregion
        #region 内部变量
        private CommonLimitData _nitrogen1AData = new CommonLimitData();
        private CommonLimitData _nitrogen1BData = new CommonLimitData();
        private CommonLimitData _nitrogen2AData = new CommonLimitData();
        private CommonLimitData _nitrogen2BData = new CommonLimitData();
        private CommonLimitData _vacuumData = new CommonLimitData();
        private CommonLimitData _cda1Data = new CommonLimitData();
        private CommonLimitData _cda2Data = new CommonLimitData();
        private CommonLimitData _extendCdaData = new CommonLimitData();
        private CommonLimitData _exhaustData = new CommonLimitData();
        private CommonLimitData _diWaterPressureData = new CommonLimitData();
        private CommonLimitData _houseChilledWaterFlowData = new CommonLimitData();
        private bool _nitrogenOn;
        private bool _cdaOn;
        private bool _extendCdaOn;
        private bool _diWaterPressureOn;
        private bool _houseChilledWaterFlowOn;
        private bool _diFillEnable;
        private bool _diReplenEnable;
        private bool _loaderDiEnable;
        private bool _slipstreamEnable;
        private bool _filterPurgeEnable;
        private double _n2BlanketPressure;
        private int _allStatus;
        private bool _processFluidDetect;
        private bool _sampleFluidDetect;
        private bool _arsFluidDetect;
        private bool _crsWashBoxFluidDetect;
        private bool _processFFUError;
        private bool _loaderFFUError;
        private double _processFFUPressure;
        private double _loaderFFUPressure;
        private bool _sampleEnable;
        private bool _sampleFlow1Enable;
        private bool _sampleFlow2Enable;
        private bool _sampleFlow3Enable;
        private bool _sampleFlow4Enable;
        private bool _startEnable;
        /// 
        /// 定时器
        /// 
        DispatcherTimer _timer;
        /// 
        /// 查询后台数据集合
        /// 
        private List _rtDataKeys = new List();
        /// 
        /// rt查询key数值字典
        /// 
        private Dictionary _rtDataValueDic = new Dictionary();
        #region Home
        private bool _homeAllOn;
        private bool _homeLoaderTransporterOn;
        private bool _homeEfemOn;
        private bool _homeProcessTransporterOn;
        private bool _homeLoaderOn;
        private bool _homePufOn;
        private bool _homeSrdOn;
        #endregion
        #endregion
        #region 属性
        public CommonLimitData Nitrogen1AData{ get { return _nitrogen1AData; } set { SetProperty(ref _nitrogen1AData, value); } }
        public CommonLimitData Nitrogen1BData { get { return _nitrogen1BData; } set { SetProperty(ref _nitrogen1BData, value); }}
        public CommonLimitData Nitrogen2AData { get { return _nitrogen2AData; } set { SetProperty(ref _nitrogen2AData, value); } }
        public CommonLimitData Nitrogen2BData { get { return _nitrogen2BData; } set { SetProperty(ref _nitrogen2BData, value); } }
        public CommonLimitData VacuumData { get { return _vacuumData; } set { SetProperty(ref _vacuumData, value); } }
        public CommonLimitData Cda1Data { get { return _cda1Data; }set { SetProperty(ref _cda1Data, value); } }
        public CommonLimitData Cda2Data{ get { return _cda2Data; } set { SetProperty(ref _cda2Data, value); }}
        public CommonLimitData ExtendCdaData{ get { return _extendCdaData; } set { SetProperty(ref _extendCdaData, value); }}
        public CommonLimitData ExhaustData{ get { return _exhaustData; } set { SetProperty(ref _exhaustData, value); } }
        public CommonLimitData DiWaterPressureData { get { return _diWaterPressureData; } set { SetProperty(ref _diWaterPressureData, value); }}
        public CommonLimitData HouseChilledWaterFlowData{ get { return _houseChilledWaterFlowData; } set { SetProperty(ref _houseChilledWaterFlowData, value); }}
        public bool NitrogenOn { get { return _nitrogenOn; } set { SetProperty(ref _nitrogenOn, value); }}
        public bool CdaOn { get { return _cdaOn; } set { SetProperty(ref _cdaOn, value); } }
        public bool ExtendCdaOn { get { return _extendCdaOn; } set { SetProperty(ref _extendCdaOn, value); } }
        public bool DiWaterPressureOn{ get { return _diWaterPressureOn; } set { SetProperty(ref _diWaterPressureOn, value); } }
        public bool HouseChilledWaterFlowOn { get { return _houseChilledWaterFlowOn; } set { SetProperty(ref _houseChilledWaterFlowOn, value); } }
        public bool DiFillEnable{ get { return _diFillEnable; } set { SetProperty(ref _diFillEnable, value); }}
        public bool DiReplenEnable{get { return _diReplenEnable; }set { SetProperty(ref _diReplenEnable, value); } }
        public bool LoaderDiEnable{ get { return _loaderDiEnable; } set { SetProperty(ref _loaderDiEnable, value); }}
        public bool SlipstreamEnable { get { return _slipstreamEnable; } set { SetProperty(ref _slipstreamEnable, value); }}
        public bool FilterPurgeEnable{ get { return _filterPurgeEnable; } set { SetProperty(ref _filterPurgeEnable, value);} }
        public double N2BlanketPressure{ get { return _n2BlanketPressure; } set { SetProperty(ref _n2BlanketPressure, value); }}
        public int AllStatus { get { return _allStatus; } set { SetProperty(ref _allStatus, value); } }
        #region Fluid Detect
        public bool ProcessFluidDetect { get { return _processFluidDetect; } set { SetProperty(ref _processFluidDetect, value); }}
        public bool SampleFluidDetect { get { return _sampleFluidDetect; } set { SetProperty(ref _sampleFluidDetect, value); } }
        public bool ArsFluidDetect{ get { return _arsFluidDetect; } set { SetProperty(ref _arsFluidDetect, value); }}
        public bool CRSWashBoxFluidDetect { get { return _crsWashBoxFluidDetect; } set { SetProperty(ref _crsWashBoxFluidDetect, value); } }
        #endregion
        #region FFU
        public bool ProcessFFUError { get { return _processFFUError; } set { SetProperty(ref _processFFUError, value); } }
        public bool LoaderFFUError { get { return _loaderFFUError; } set { SetProperty(ref _loaderFFUError, value); } }
        public double ProcessFFUPressure { get { return _processFFUPressure; } set { SetProperty(ref _processFFUPressure, value); } }
        public double LoaderFFUPressure { get { return _loaderFFUPressure; } set { SetProperty(ref _loaderFFUPressure, value); } }  
        #endregion
        #region Home
        public bool HomeAllOn { get { return _homeAllOn; } set { SetProperty(ref _homeAllOn, value); } }
        public bool HomeLoaderTransporterOn { get { return _homeLoaderTransporterOn; } set { SetProperty(ref _homeLoaderTransporterOn, value); }}
        public bool HomeEfemOn { get { return _homeEfemOn; } set { SetProperty(ref _homeEfemOn, value); }}
        public bool HomeProcessTransporterOn{ get { return _homeProcessTransporterOn; } set { SetProperty(ref _homeProcessTransporterOn, value); } }
        public bool HomeLoaderOn { get { return _homeLoaderOn; } set { SetProperty(ref _homeLoaderOn, value); }}
        public bool HomePufOn { get { return _homePufOn; } set { SetProperty(ref _homePufOn, value); }}
        public bool HomeSrdOn { get { return _homeSrdOn; } set { SetProperty(ref _homeSrdOn, value); } }
        #endregion
        public bool SampleEnable { get { return _sampleEnable; } set { SetProperty(ref _sampleEnable, value); } }
        public bool SampleFlow1Enable { get { return _sampleFlow1Enable; } set { SetProperty(ref _sampleFlow1Enable, value); } }
        public bool SampleFlow2Enable { get { return _sampleFlow2Enable; } set { SetProperty(ref _sampleFlow2Enable, value); } }
        public bool SampleFlow3Enable { get { return _sampleFlow3Enable; } set { SetProperty(ref _sampleFlow3Enable, value); } }
        public bool SampleFlow4Enable { get { return _sampleFlow4Enable; } set { SetProperty(ref _sampleFlow4Enable, value); } }
        public bool StartEnable { get { return _startEnable; } set { SetProperty(ref _startEnable, value); } }
        #endregion
        #region 指令
        public ICommand HomeLoaderCommand { get; private set;}
        public ICommand HomePufCommand { get; private set;}
        public ICommand HomeEfemCommand { get; private set; }
        public ICommand HomeLoaderTransporterCommand { get;private set; }
        public ICommand HomeProcessTransporterCommand{get;private set;}
        public ICommand HomeSRDCommand { get; private set; }
        public ICommand NitrogenOnCommand{get;private set;}
        public ICommand NitrogenOffCommand{ get;private set;}
        public ICommand CDAOnCommand { get; private set; }
        public ICommand CDAOffCommand { get; private set; }
        public ICommand ExternalCDAOnCommand { get;private set; }
        public ICommand ExternalCDAOffCommand { get;private set; }
        public ICommand DiWaterPressureOnCommand { get; private set; }
        public ICommand DiWaterPressureOffCommand { get; private set; }
        public ICommand HouseChilledWaferFlowOnCommand {  get; private set; }   
        public ICommand HouseChilledWaferFlowOffCommand { get; private set; }
        public ICommand DiFillEnableCommand { get; private set; }   
        public ICommand DiFillDisableCommand { get; private set; }
        public ICommand DiReplenEnableCommand { get; private set; }
        public ICommand DiReplenDisableCommand { get; private set; }
        public ICommand LoaderDIEnableCommand { get; private set; } 
        public ICommand LoaderDIDisableCommand {  get; private set; }
        public ICommand FilterPurgeEnableCommand { get; private set; }
        public ICommand FilterPurgeDisableCommand { get; private set; }
        public ICommand AllOnCommand { get; private set; }
        public ICommand AllOffCommand { get; private set; }
        public ICommand SampleEnableCommand { get; private set; }
        public ICommand SampleDisableCommand { get; private set; }
        #endregion
        /// 
        /// 构造函数
        /// 
        public SystemFacilitiesViewModel()
        {
            HomeLoaderCommand = new DelegateCommand