using Aitex.Core.Common;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.RecipeCenter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace MECF.Framework.Common.WaferHolder
{
    public enum WaferHolderStatus
    {
        Disabled = 0,
        Empty = 1,
        Normal = 2,
        Processing = 3,
        Completed=4,
        Failed=5,
        MisProcessed=6
    }
    [DataContract]
    public class WaferHolderInfo : NotifiableItem
    {        
        [DataMember]
        public string Id { get; set; }
        /// 
        /// 创建时所在buffer Id
        /// 
        [DataMember]
        public Int32 BufferId { get; set; }
        /// 
        /// 类型
        /// 
        [DataMember]
        public string CrsType { get; set; }
        /// 
        /// Wafer尺寸
        /// 
        [DataMember]
        public Int32 WaferSize { get; set; }
        /// 
        /// 可用性
        /// 
        [DataMember]
        public Boolean Enabled { get; set; }
        /// 
        /// 化学用剂
        /// 
        [DataMember]
        public string Chemistry { get; set; }
        /// 
        /// CRS-A Id
        /// 
        [DataMember]
        public string CrsAId { get; set; }
        /// 
        /// CRS-A总次数
        /// 
        [DataMember]
        public int CrsATotalUses { get; set; }
        /// 
        /// CRS-A pad清理后次数
        /// 
        [DataMember]
        public int CrsAUsesSincePadClean { get; set; }
        /// 
        /// CRS-A seal清理后次数
        /// 
        [DataMember]
        public int CrsAUsesSinceSealClean { get; set; }
        /// 
        /// CRS-B Id
        /// 
        [DataMember]
        public string CrsBId { get; set; }
        /// 
        /// CRS-A总次数
        /// 
        [DataMember]
        public int CrsBTotalUses { get; set; }
        /// 
        /// CRS-A pad清理后次数
        /// 
        [DataMember]
        public int CrsBUsesSincePadClean { get; set; }
        /// 
        /// CRS-A seal清理后次数
        /// 
        [DataMember]
        public int CrsBUsesSinceSealClean { get; set; }
        /// 
        /// 所有使用次数
        /// 
        [DataMember]
        public int TotalUses { get; set; }
        /// 
        /// 所有生产片使用次数
        ///         
        [DataMember]
        public int TotalProductWafers { get; set; }
        /// 
        /// Dummy Wafes数量
        /// 
        [DataMember]
        public int TotalDummyWafers { get; set; }
        /// 
        /// 当前位置
        /// 
        [DataMember]
        public string CurrentLocation { get; set; }
        /// 
        /// Wafer A ID
        /// 
        [DataMember]
        public string WaferAId { get; set; }
        /// 
        /// Wafer A类型
        /// 
        [DataMember]
        public int WaferAType { get; set; }
        /// 
        /// Wafer B ID
        /// 
        [DataMember]
        public string WaferBId { get; set; }
        /// 
        /// Wafer B 类型
        /// 
        [DataMember]
        public int WaferBType { get; set; }
        /// 
        /// 当前ProcessJob
        /// 
        [DataMember]
        public string CurrentProcessJobId { get; set; }
        /// 
        /// 当前ControlJob
        /// 
        [DataMember]
        public string CurrentControlJobId { get; set; }
        /// 
        /// 当前LotID 
        /// 
        [DataMember]
        public string LotId { get; set; }
        /// 
        /// 状态
        /// 
        [DataMember]
        public WaferHolderStatus Status { get; set; }
        /// 
        /// 创建时间
        /// 
        [DataMember]
        public DateTime CreateTime { get; set; }
        /// 
        /// 最后一次更新时间
        /// 
        [DataMember]
        public DateTime LastUpdateTime { get; set; }
        /// 
        /// Sequence Id
        /// 
        public string SequenceId { get; set; }
        /// 
        /// Sequence Recipe
        /// 
        [DataMember]
        public SequenceRecipe SequenceRecipe { get; set; }
        /// 
        /// Metal模块名称
        /// 
        public ModuleName MetalModuleName { get; set; }
        /// 
        /// 调度经过所有过程
        /// 
        public List SchedulerModules { get; set; } = new List();
        /// 
        /// 是否可以去Loader
        /// 
        public bool IsToLoader { get; set; } = true;
        /// 
        /// 上一个Metal Recipe完成时间
        /// 
        public DateTime LastMetalRecipeCompleteTime { get; set; }
        /// 
        /// 起始的位置
        /// 
        public string OriginalBuffer { get; set; }
        /// 
        /// 初始化Wafer信息
        /// 
        /// 
        /// 
        public void InitWaferInfo(int waferSize)
        {
            this.WaferSize = waferSize;
        }
        /// 
        /// 克隆
        /// 
        /// 
        public void Clone(WaferHolderInfo info)
        {
            this.Id= info.Id;
            this.CrsType = info.CrsType;
            this.WaferSize = info.WaferSize;
            this.Enabled = info.Enabled;
            this.CrsAId = info.CrsAId;
            this.CrsATotalUses = info.CrsATotalUses;
            this.CrsAUsesSinceSealClean = info.CrsAUsesSinceSealClean;
            this.CrsAUsesSincePadClean = info.CrsAUsesSincePadClean;
            this.CrsBId = info.CrsBId;
            this.CrsBTotalUses = info.CrsBTotalUses;
            this.CrsBUsesSinceSealClean = info.CrsBUsesSinceSealClean;
            this.CrsBUsesSincePadClean = info.CrsBUsesSincePadClean;
            this.Chemistry = info.Chemistry;
            this.TotalUses = info.TotalUses;
            this.TotalProductWafers = info.TotalProductWafers;
            this.CurrentLocation = info.CurrentLocation;
            this.CurrentProcessJobId = info.CurrentProcessJobId;
            this.CurrentControlJobId = info.CurrentControlJobId;
            this.Status = info.Status;
            this.WaferAId= info.WaferAId;
            this.WaferBId= info.WaferBId;
            this.SequenceId = info.SequenceId;
            this.SequenceRecipe = info.SequenceRecipe;
        }
        /// 
        /// 克隆
        /// 
        /// 
        public void CloneBaseInfo(WaferHolderInfo info)
        {
            this.Id = info.Id;
            this.BufferId = info.BufferId;
            this.CrsType = info.CrsType;
            this.WaferSize = info.WaferSize;
            this.Enabled = info.Enabled;
            this.CrsATotalUses = info.CrsATotalUses;
            this.CrsAUsesSinceSealClean = info.CrsAUsesSinceSealClean;
            this.CrsAUsesSincePadClean = info.CrsAUsesSincePadClean;
            this.CrsBTotalUses = info.CrsBTotalUses;
            this.CrsBUsesSinceSealClean = info.CrsBUsesSinceSealClean;
            this.CrsBUsesSincePadClean = info.CrsBUsesSincePadClean;
            this.TotalUses = info.TotalUses;
            this.TotalProductWafers = info.TotalProductWafers;
            this.CurrentLocation = info.CurrentLocation;
            this.Chemistry=info.Chemistry;
            this.WaferAId = info.WaferAId;
            this.WaferBId = info.WaferBId;
        }
    }
}