using Aitex.Core.Common;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.IOCore;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.ToolLayout;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.EFEM
{
    public class DummyDevice
    {
        #region 常量 
        private const string CASSETE_200_PRESENT = "Cassete200Present";
        private const string CASSETE_150_PRESENT = "Cassete150Present";
        private const string CASSETE_100_PRESENT = "Cassete100Present";
        #endregion
        #region 内部变量
        DummyCassetteItem _dummyItem;
        /// 
        /// 变量是否初始化字典
        /// 
        private Dictionary _variableInitializeDic = new Dictionary();
        /// 
        /// 
        /// 
        private ModuleName _module;
        /// 
        /// 尺寸
        /// 
        private WaferSize _waferSize;
        /// 
        /// 是否存在Cassete
        /// 
        private bool _hasCassete = true;
        #endregion
        #region 属性
        /// 
        /// 尺寸
        /// 
        public WaferSize WaferSize { get { return _waferSize; } }
        /// 
        /// 是否存在Cassete
        /// 
        public bool HasCassette { get { return _hasCassete; } }
        /// 
        /// 最大Slot数量
        /// 
        public int MaxSlotNumber { get; internal set; }
        #endregion
        /// 
        /// 构造函数
        /// 
        /// 
        public DummyDevice(ModuleName moduleName)
        {
            _module = moduleName;
            InitializeData();
            DATA.Subscribe($"{_module}.CassettePlaced", () => true, SubscriptionAttribute.FLAG.IgnoreSaveDB);
            DATA.Subscribe($"{_module}.WaferSize", () => WaferSize.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
        }
        /// 
        /// 初始化数据
        /// 
        private void InitializeData()
        {
            int dummyWaferSize = SC.GetValue($"EFEM.{_module.ToString()}WaferSize");
            _waferSize = (WaferSize)dummyWaferSize;
            _dummyItem = DummyCasseteItemManager.Instance.GetDummyCassetteItem(_module.ToString());
            WaferManager.Instance.SubscribeLocation(_module, _dummyItem.MaxNumberOfSlots);
            MaxSlotNumber = _dummyItem.MaxNumberOfSlots;
        }
    }
}