using Aitex.Core.Common;
using Aitex.Core.UI.MVVM;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.Utilities;
using MECF.Framework.Common.WaferHolder;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.NetworkInformation;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;
namespace CyberX8_MainPages.ViewModels
{
    public class MaterialMovementViewModel : BindableBase
    {
        #region 常量
        private const int DATAGRIP_ROW_NUM = 24;
        
        #endregion
        #region 内部变量
        #region system
        /// 
        /// rt查询key
        /// 
        private List _rtDataKeys = new List();
        /// 
        /// 时钟
        /// 
        DispatcherTimer _timer;
        /// 
        /// rt查询数据
        /// 
        private Dictionary _rtDataValueDic = new Dictionary();
        /// 
        /// LayoutCell列表
        /// 
        private ObservableCollection _locationLst;
        #endregion
        #region Common
        /// 
        /// Module
        /// 
        private string _module;
        /// 
        /// MaterialData Collection
        /// 
        private List _materialDatas;
        /// 
        /// MaterialData Sub Collection1
        /// 
        private ObservableCollection _materialSubdatas1;
        /// 
        /// MaterialData Sub Collection2
        /// 
        private ObservableCollection _materialSubdatas2;
        /// 
        /// MaterialData Sub Collection Buffer1
        /// 
        private List _materialSubdatasBuffer1;
        /// 
        /// MaterialData Sub Collection Buffer2
        /// 
        private List _materialSubdatasBuffer2;
        /// 
        /// Pre MaterialDatas1
        /// 
        private List _preMaterialDatas1 = new List();
        /// 
        /// Pre MaterialDatas2
        /// 
        private List _preMaterialDatas2 = new List();
        /// ;
        /// 
        /// From Loaction选择
        /// 
        private string _fromLocation;
        /// 
        /// To Location选择
        /// 
        private string _toLocation;
        /// 
        /// ProcessTransporter是否Busy
        /// 
        private bool _isProcessTransBusy;
        /// 
        /// LoaderTransporter是否Busy
        /// 
        private bool _isLoaderTransBusy;
        /// 
        /// 是否在Auto模式下
        /// 
        private bool _isAutoMode;
        /// 
        /// UpdateLocation按钮是否启用
        /// 
        private bool _isMoveEnable;
        /// 
        /// Remove按钮是否启用
        /// 
        private bool _isRemoveEnable;
        /// 
        /// Selected MaterialData
        /// 
        private ModuleMaterial _selectedMaterialData;
        /// 
        /// Pre Selected MaterialData
        /// 
        private ModuleMaterial _preSelectedMaterialData;
        /// 
        /// Selected MaterialData1
        /// 
        private ModuleMaterial _selectedMaterialData1;
        /// 
        /// Selected MaterialData2
        /// 
        private ModuleMaterial _selectedMaterialData2;
        /// 
        /// Selected ModuleName
        /// 
        private string _selectedModuleName;
        /// 
        /// WaferMove FromSlot列表
        /// 
        private ObservableCollection _fromSlotLst = new ObservableCollection();
        /// 
        /// WaferMove ToSlot列表
        /// 
        private ObservableCollection _toSlotLst = new ObservableCollection();
        /// 
        /// WaferMove Modules列表
        /// 
        private ObservableCollection _moduleLst = new ObservableCollection();
        /// 
        /// WaferMove From Module
        /// 
        private ModuleName _fromModule;
        /// 
        /// WaferMove To Module
        /// 
        private ModuleName _toModule;
        /// 
        /// WaferMove To Slot
        /// 
        private int _toSlot;
        /// 
        /// WaferMove From Slot
        /// 
        private int _fromSlot;
        /// 
        /// WaferMove Update按钮是否启用
        /// 
        private bool _isWaferMoveEnable;
        /// 
        /// MaterialDataBuffer
        /// 
        private ModuleMaterial _materialDataBuffer;
        /// 
        /// Grid Selection
        /// 
        private bool _gridSelection;
        #endregion
        #endregion
        #region 属性
        #region Common
        /// 
        /// MaterialData Collection
        /// 
        public List MaterialDatas
        {
            get { return _materialDatas; }
            set
            {
                SetProperty(ref _materialDatas, value);
            }
        }
        /// 
        /// MaterialData Sub Collection1
        /// 
        public ObservableCollection MaterialSubdatas1
        {
            get { return _materialSubdatas1; }
            set
            {
                SetProperty(ref _materialSubdatas1, value);
            }
        }
        /// 
        /// MaterialData Sub Collection2
        /// 
        public ObservableCollection MaterialSubdatas2
        {
            get { return _materialSubdatas2; }
            set
            {
                SetProperty(ref _materialSubdatas2, value);
            }
        }
        /// 
        /// Selected MaterialData
        /// 
        public ModuleMaterial SelectedMaterialData
        {
            get { return _selectedMaterialData; }
            set
            {
                SetProperty(ref _selectedMaterialData, value);
            }
        }
        /// 
        /// Selected MaterialData1
        /// 
        public ModuleMaterial SelectedMaterialData1
        {
            get { return _selectedMaterialData1; }
            set
            {
                SetProperty(ref _selectedMaterialData1, value);
            }
        }
        /// 
        /// Selected MaterialData2
        /// 
        public ModuleMaterial SelectedMaterialData2
        {
            get { return _selectedMaterialData2; }
            set
            {
                SetProperty(ref _selectedMaterialData2, value);
            }
        }
        /// 
        /// Selected ModuleName
        /// 
        public string SelectedModuleName
        {
            get { return _selectedModuleName; ; }
            set
            {
                SetProperty(ref _selectedModuleName, value);
            }
        }
        /// 
        /// LayoutCell列表
        /// 
        public ObservableCollection LocationLst
        {
            get { return _locationLst; }
            set { SetProperty(ref _locationLst, value); }
        }
        /// 
        /// From Location
        /// 
        public string FromLocation
        {
            get { return _fromLocation; }
            set { SetProperty(ref _fromLocation, value); }
        }
        /// 
        /// To Location
        /// 
        public string ToLocation
        {
            get { return _toLocation; }
            set { SetProperty(ref _toLocation, value); }
        }
        /// 
        /// UpdateLocation按钮是否启用
        /// 
        public bool IsMoveEnable
        {
            get { return _isMoveEnable; }
            set { SetProperty(ref _isMoveEnable, value); }
        }
        /// 
        /// Remove按钮是否启用
        /// 
        public bool IsRemoveEnable
        {
            get { return _isRemoveEnable; }
            set { SetProperty(ref _isRemoveEnable, value); }
        }
        /// 
        /// WaferMove FromSlot列表
        /// 
        public ObservableCollection FromSlotLst
        {
            get { return _fromSlotLst; }
            set { SetProperty(ref _fromSlotLst, value); }
        }
        /// 
        /// WaferMove ToSlot列表
        /// 
        public ObservableCollection ToSlotLst
        {
            get { return _toSlotLst; }
            set { SetProperty(ref _toSlotLst, value); }
        }
        /// 
        /// WaferMove Modules列表
        /// 
        public ObservableCollection ModuleLst
        {
            get { return _moduleLst; }
            set { SetProperty(ref _moduleLst, value); }
        }
        /// 
        /// WaferMove From Module
        /// 
        public ModuleName FromModule
        {
            get { return _fromModule; }
            set { SetProperty(ref _fromModule, value); }
        }
        /// 
        /// WaferMove To Module
        /// 
        public ModuleName ToModule
        {
            get { return _toModule; }
            set { SetProperty(ref _toModule, value); }
        }
        /// 
        /// WaferMove To Slot
        /// 
        public int ToSlot
        {
            get { return _toSlot; }
            set { SetProperty(ref _toSlot, value); }
        }
        /// 
        /// WaferMove To Slot
        /// 
        public int FromSlot
        {
            get { return _fromSlot; }
            set { SetProperty(ref _fromSlot, value); }
        }
        /// 
        /// WaferMove按钮是否启用
        /// 
        public bool IsWaferMoveEnable
        {
            get { return _isWaferMoveEnable; }
            set { SetProperty(ref _isWaferMoveEnable, value); }
        }
        #endregion
        #endregion
        #region 命令
        public ICommand UpdateLocationCommand { get; private set; }
        public ICommand UpdateWaferCommand { get; private set; }
        public ICommand RemoveCommand { get; private set; }
        public ICommand ModuleChangeCommand { get; private set; }
        public ICommand SelectionChangeCommand { get; private set; }
        public ICommand ResetWafersCommand { get; private set; }
        #endregion
        /// 
        /// 构造函数
        /// 
        public MaterialMovementViewModel()
        {
            _materialDatas = new List();
            _materialSubdatas1 = new ObservableCollection();
            _materialSubdatas2 = new ObservableCollection();
            _materialSubdatasBuffer1 = new List();
            _materialSubdatasBuffer2 = new List();
            UpdateLocationCommand = new DelegateCommand