using Aitex.Core.RT.Fsm;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.ToolLayout;
using PunkHPX8_Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Modules.Dummy
{
    public class DummyEntity : Entity, IEntity, IModuleEntity
    {
        public enum MSG
        {
            Home
        }
        #region 内部变量
        DummyCassetteItem _dummyItem;
        #endregion
        #region 属性
        public ModuleName Module { get; private set; }
        /// 
        /// 初始化状态
        /// 
        public bool IsInit
        {
            get { return false; }
        }
        /// 
        /// 空闲状态
        /// 
        public bool IsIdle
        {
            get
            {
                return true;
            }
        }
        /// 
        /// 是否发生错误
        /// 
        public bool IsError
        {
            get { return false; }
        }
        /// 
        /// 是否正在作业
        /// 
        public bool IsBusy
        {
            get { return false; }
        }
        public bool IsAuto { get; } = true;
        /// 
        /// 是否为工程模式
        /// 
        public bool IsEngineering { get; } = false;
        /// 
        /// 是否为产品模式
        /// 
        public bool IsProduction { get; } = true;
        /// 
        /// 是否禁用
        /// 
        public bool IsDisable { get; internal set; } = false;
        /// 
        /// 最大Slot数量
        /// 
        public int MaxSlotNumber { get; internal set; }
        #endregion
        /// 
        /// 构造函数
        /// 
        /// 
        public DummyEntity(ModuleName module)
        {
            this.Module = module;
            _dummyItem = DummyCasseteItemManager.Instance.GetDummyCassetteItem(module.ToString());
            WaferManager.Instance.SubscribeLocation(Module, _dummyItem.MaxNumberOfSlots);
            MaxSlotNumber = _dummyItem.MaxNumberOfSlots;
        }
        public bool Check(int msg, out string reason, params object[] args)
        {
            reason = "";
            return false;
        }
        public bool CheckAcked(int msg)
        {
            return false;
        }
        public int Invoke(string function, params object[] args)
        {
            switch (function)
            {
                case "HomeAll":
                    return (int)MSG.Home;
            }
            return (int)FSM_MSG.NONE;
        }
    }
}