using Aitex.Core.UI.MVVM;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Device.Safety;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.Utilities;
using OpenSEMI.ClientBase.Command;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Threading;
namespace PunkHPX8_MainPages.ViewModels
{
    public class SystemSafetyViewModel : BindableBase
    {
        #region 常量
        private const string SAFETY_DATA = "SafetyData";
        private const string IS_SWITCH_ON = "IsSwitchOn";
        private const string IS_INITIALIZED = "IsInitialized";
        private const string IS_MOVING = "IsMoving";
        #endregion
        #region 内部变量
        private SafetyData _commonSafetyData;
        #region Loader
        private bool _isLoaderRotationOn;
        private bool _isLoaderASwingOn;
        private bool _isLoaderATiltOn;
        private bool _isLoaderBSwingOn;
        private bool _isLoaderBTiltOn;
        private bool _isLoaderMoving;
        #endregion
        #region PUFs
        private bool _isPuf1VerticalOn;
        private bool _isPuf1RotationOn;
        private bool _isPuf1FlipOn;
        private bool _isPuf2VerticalOn;
        private bool _isPuf2RotationOn;
        private bool _isPuf2FlipOn;
        private bool _isPufsMoving;
        #endregion
        #region SRD
        private bool _isSrd1ArmOn;
        private bool _isSrd1RotationOn;
        private bool _isSrd2ArmOn;
        private bool _isSrd2RotationOn;
        private bool _isSRDsMoving;
        #endregion
        #region Transporters
        private bool _isLoaderGantryOn;
        private bool _isLoaderElevatorOn;
        private bool _isLoaderTransMoving;
        private bool _isProcessGantryOn;
        private bool _isProcessElevatorOn;
        private bool _isProcessTransMoving;
        #endregion
        #endregion
        #region 属性
        public SafetyData CommonSafetyData { get { return _commonSafetyData; } set { SetProperty(ref _commonSafetyData, value); } }
        #region Loader
        public bool IsLoaderRotationOn { get { return _isLoaderRotationOn; } set { SetProperty(ref _isLoaderRotationOn, value); } }
        public bool IsLoaderASwingOn { get { return _isLoaderASwingOn; } set { SetProperty(ref _isLoaderASwingOn, value); } }
        public bool IsLoaderATiltOn { get { return _isLoaderATiltOn; } set { SetProperty(ref _isLoaderATiltOn, value); } }
        public bool IsLoaderBSwingOn { get { return _isLoaderBSwingOn; } set { SetProperty(ref _isLoaderBSwingOn, value); } }
        public bool IsLoaderBTiltOn { get { return _isLoaderBTiltOn; } set { SetProperty(ref _isLoaderBTiltOn, value); } }
        /// 
        /// Is Loader Moving
        /// 
        public bool IsLoaderMoving { get { return _isLoaderMoving; } set { SetProperty(ref _isLoaderMoving, value); } }
        #endregion
        #region PUFs
        public bool IsPuf1VerticalOn { get { return _isPuf1VerticalOn; } set { SetProperty(ref _isPuf1VerticalOn, value); } }
        public bool IsPuf1RotationOn { get { return _isPuf1RotationOn; } set { SetProperty(ref _isPuf1RotationOn, value); } }
        public bool IsPuf1FlipOn { get { return _isPuf1FlipOn; } set { SetProperty(ref _isPuf1FlipOn, value); } }
        public bool IsPuf2VerticalOn { get { return _isPuf2VerticalOn; } set { SetProperty(ref _isPuf2VerticalOn, value); } }
        public bool IsPuf2RotationOn { get { return _isPuf2RotationOn; } set { SetProperty(ref _isPuf2RotationOn, value); } }
        public bool IsPuf2FlipOn { get { return _isPuf2FlipOn; } set { SetProperty(ref _isPuf2FlipOn, value); } }
        /// 
        /// Is Pufs Moving
        /// 
        public bool IsPufsMoving { get { return _isPufsMoving; } set { SetProperty(ref _isPufsMoving, value); } }
        #endregion
        #region SRD
        public bool IsSrd1ArmOn { get { return _isSrd1ArmOn; } set { SetProperty(ref _isSrd1ArmOn, value); } }
        public bool IsSrd1RotationOn { get { return _isSrd1RotationOn; } set { SetProperty(ref _isSrd1RotationOn, value);}}
        public bool IsSrd2ArmOn { get { return _isSrd2ArmOn; } set { SetProperty(ref _isSrd2ArmOn, value); } }
        public bool IsSrd2RotationOn { get { return _isSrd2RotationOn; } set { SetProperty(ref _isSrd2RotationOn, value); } }
        /// 
        /// Is SRDs Moving
        /// 
        public bool IsSRDsMoving { get { return _isSRDsMoving; } set { SetProperty(ref _isSRDsMoving, value); } }
        #endregion
        #region Transporters
        public bool IsLoaderGantryOn { get { return _isLoaderGantryOn; } set { SetProperty(ref _isLoaderGantryOn, value); } }
        public bool IsLoaderElevatorOn { get { return _isLoaderElevatorOn; } set { SetProperty(ref _isLoaderElevatorOn, value); } }
        /// 
        /// Is LoaderTransporters Moving
        /// 
        public bool IsLoaderTransMoving { get { return _isLoaderTransMoving; } set { SetProperty(ref _isLoaderTransMoving, value); }}
        public bool IsProcessGantryOn { get { return _isProcessGantryOn; } set { SetProperty(ref _isProcessGantryOn, value); } }
        public bool IsProcessElevatorOn { get { return _isProcessElevatorOn; } set { SetProperty(ref _isProcessElevatorOn, value); } }
        /// 
        /// Is ProcessTransporters Moving
        /// 
        public bool IsProcessTransMoving { get { return _isProcessTransMoving; } set { SetProperty(ref _isProcessTransMoving, value); } }
        #endregion
        #endregion
        /// 
        /// 定时器
        /// 
        DispatcherTimer _timer;
        /// 
        /// 查询后台数据集合
        /// 
        private List _rtDataKeys = new List();
        /// 
        /// rt查询key数值字典
        /// 
        private Dictionary _rtDataValueDic = new Dictionary();
        #region 指令
        public ICommand PauseCommand { get; private set; }
        public ICommand ResumeCommand { get; private set; }
        public ICommand ResetCommand { get; private set; }
        public ICommand LockLoaderDoorsCommand { get; private set; }
        public ICommand UnlockLoaderDoorsCommand { get; private set; }
        public ICommand LockBufferDoorsCommand { get; private set; }
        public ICommand UnlockBufferDoorsCommand { get; private set; }
        public ICommand LockProcessDoorsCommand { get; private set; }
        public ICommand UnlockProcessDoorsCommand { get; private set; }
        public ICommand AllOnCommand { get; private set; }
        #endregion
        /// 
        /// 构造函数
        /// 
        public SystemSafetyViewModel()
        {
            PauseCommand = new DelegateCommand