using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MECF.Framework.Common.FAServices
{
    /// 
    /// Gem200的事件
    /// 
    public static class UniversalEvents
    {
        public const string EquipmentOFFLINE = "EquipmentOFFLINE";
        public const string ControlStateLOCAL = "ControlStateLOCAL";
        public const string ControlStateREMOTE = "ControlStateREMOTE";
        public const string ProcessingStarted = "ProcessingStarted";
        public const string ProcessingCompleted = "ProcessingCompleted";
        public const string ProcessingStopped = "ProcessingStopped";
        public const string ProcessingStateChanged = "ProcessingStateChanged";
        public const string EquipmentConstantChanged = "EquipmentConstantChanged";
        public const string ProcessProgramChanged = "ProcessProgramChanged";
        public const string ProcessProgramSelected = "ProcessProgramSelected";
        public const string ProcessProgramCreated = "ProcessProgramCreated";
        public const string SpoolingActivated = "SpoolingActivated";
        public const string SpoolingDeactivated = "SpoolingDeactivated";
        public const string SpoolingFailed = "SpoolingFailed";
        public const string EquipmentChangeToAuto = "EquipmentChangeToAuto";
        public const string EquipmentChangeToManual = "EquipmentChangeToManual";
        public const string WAFER_LEFT_POSITION = "WAFER_LEFT_POSITION";
        public const string WAFER_ARRIVE_POSITION = "WAFER_ARRIVE_POSITION";
        public const string CARRIER_ARRIVED = "CARRIER_ARRIVED";
        public const string CARRIER_REMOVED = "CARRIER_REMOVED";
        public const string CARRIER_ID_READ = "CARRIER_ID_READ";
        public const string CARRIER_ID_READ_FAILED = "CARRIER_ID_READ_FAILED";
        public const string CARRIER_ID_WRITE = "CARRIER_ID_WRITE";
        public const string CARRIER_ID_WRITE_FAILED = "CARRIER_ID_WRITE_FAILED";
        public const string CARRIER_LOADED = "CARRIER_LOADED";
        public const string CARRIER_UNLOADED = "CARRIER_UNLOADED";
        public const string SLOT_MAP_AVAILABLE = "SLOT_MAP_AVAILABLE";
        public const string PortReadyToLoad = "PortReadyToLoad";
        public const string PortReadyToUnload = "PortReadyToUnload";
        public const string CarrierProcessStart = "CarrierProcessStart";
        public const string CarrierProcessComplete = "CarrierProcessComplete";
        public const string PortJobStarted = "PortJobStarted";
        public const string PortJobStopped = "PortJobStopped";
        public const string PortJobPaused = "PortJobPaused";
        public const string PortJobResumed = "PortJobResumed";
        public const string PortJobAborted = "PortJobAborted";
        public const string PortJobFinished = "PortJobFinished";
        public const string PortJobFailed = "PortJobFailed";
        public const string PortMapFailed = "PortMapFailed";
        public const string PortPPSelected = "PortPPSelected";
        public const string PortPPSelectFailed = "PortPPSelectFailed";
        public const string RecipeStart = "RecipeStart";
        public const string RecipeComplete = "RecipeComplete";
        public const string RecipeStepStart = "RecipeStepStart";
        public const string RecipeStepEnd = "RecipeStepEnd";
        public const string RecipeFailed = "RecipeFailed";
        public const string CarrierInEnd = "CarrierInEnd";
        public const string CarrierInStart = "CarrierInStart";
        public const string CarrierOutStart = "CarrierOutStart";
        public const string CarrierOutEnd = "CarrierOutEnd";
        public const string ChargeStart = "ChargeStart";
        public const string ChargeEnd = "ChargeEnd";
        public const string DischargeStart = "DischargeStart";
        public const string DischargeEnd = "DischargeEnd";
        public const string BatchLocOccupied = "BatchLocOccupied";
        public const string BatchLocUnOccupied = "BatchLocUnOccupied";
        public const string SideDummyStateAlarm = "SideDummyStateAlarm";
        public const string ExtraDummyStateAlarm = "ExtraDummyStateAlarm";
        public const string SideDummyStateWarning = "SideDummyStateWarning";
        public const string ExtraDummyStateWarning = "ExtraDummyStateWarning";
        /// 
        /// 定义Gem200事件的ID
        /// 
        public enum EventName
        {
            EquipmentOFFLINE = 1,
            ControlStateLOCAL = 2,
            ControlStateREMOTE = 3,
            ProcessingStarted = 4,
            ProcessingCompleted = 5,
            ProcessingStopped = 6,
            ProcessingStateChanged = 7,
            EquipmentConstantChanged = 8,
            ProcessProgramChanged = 9,
            ProcessProgramSelected = 10,
            ProcessProgramCreated = 14,
            SpoolingActivated = 11,
            SpoolingDeactivated = 12,
            SpoolingFailed = 13,
            EquipmentChangeToAuto = 501,
            EquipmentChangeToManual = 502,
            WAFER_LEFT_POSITION = 503,
            WAFER_ARRIVE_POSITION = 504,
            CARRIER_ARRIVED = 1000,
            CARRIER_REMOVED = 1001,
            CARRIER_ID_READ = 1002,
            CARRIER_ID_READ_FAILED = 1003,
            CARRIER_ID_WRITE = 1004,
            CARRIER_ID_WRITE_FAILED = 1005,
            CARRIER_LOADED = 1006,
            CARRIER_UNLOADED = 1007,
            SLOT_MAP_AVAILABLE = 1008,
            PortReadyToLoad = 1010,
            PortReadyToUnload = 1011,
            CarrierProcessStart = 1020,
            CarrierProcessComplete = 1021,
            PortJobStarted = 1022,
            PortJobStopped = 1023,
            PortJobPaused = 1024,
            PortJobResumed = 1025,
            PortJobAborted = 1026,
            PortJobFinished = 1027,
            PortJobFailed = 1028,
            PortMapFailed = 1029,
            PortPPSelected = 1030,
            PortPPSelectFailed = 1031,
            RecipeStart = 2000,
            RecipeComplete = 2001,
            RecipeStepStart = 2002,
            RecipeStepEnd = 2003,
            RecipeFailed = 2004,
            ChargeStart = 2010,
            ChargeEnd = 2011,
            DischargeStart = 2012,
            DischargeEnd = 2013,
            BatchLocOccupied = 2020,
            BatchLocUnOccupied = 2021,
            SideDummyStateAlarm = 2022,
            ExtraDummyStateAlarm = 2023,
            CarrierInEnd = 2024,
            CarrierInStart = 2026,
            CarrierOutStart = 2025,
            CarrierOutEnd = 2027,
            SideDummyStateWarning = 2028,
            ExtraDummyStateWarning = 2029,
        }
        /// 
        /// 定义Gem200的事件所Link的VIDs
        /// 
        public static Dictionary UniversalEventsDictionary = new Dictionary()
        {
            {EquipmentOFFLINE, new VIDItem() {Name = EquipmentOFFLINE, Index = (int)EventName.EquipmentOFFLINE, LinkableVid = new[] {3,4}}},
            {ControlStateLOCAL, new VIDItem() {Name = ControlStateLOCAL, Index = (int)EventName.ControlStateLOCAL, LinkableVid = new[] {3,4}}},
            {ControlStateREMOTE, new VIDItem() {Name = ControlStateREMOTE, Index = (int)EventName.ControlStateREMOTE, LinkableVid = new[] {3,4}}},
            {ProcessingStarted, new VIDItem() {Name = ProcessingStarted, Index = (int)EventName.ProcessingStarted, LinkableVid = new[] {3,7}}},
            {ProcessingCompleted, new VIDItem() {Name = ProcessingCompleted, Index = (int)EventName.ProcessingCompleted, LinkableVid = new[] {3,7}}},
            {ProcessingStopped, new VIDItem() {Name = ProcessingStopped, Index = (int)EventName.ProcessingStopped, LinkableVid = new[] {3,7}}},
            {ProcessingStateChanged, new VIDItem() {Name = ProcessingStateChanged, Index = (int)EventName.ProcessingStateChanged, LinkableVid = new[] {3,8,7}}},
            {EquipmentConstantChanged, new VIDItem() {Name = EquipmentConstantChanged, Index = (int)EventName.EquipmentConstantChanged, LinkableVid = new[] {(int)DataVariables.DataName.ECChangedID}}},
            {ProcessProgramChanged, new VIDItem() {Name = ProcessProgramChanged, Index = (int)EventName.ProcessProgramChanged, LinkableVid = new[] {(int)DataVariables.DataName.SequenceID,(int)DataVariables.DataName.PPChangeName, (int)DataVariables.DataName.PPChangeStatus}}},
            {ProcessProgramSelected, new VIDItem() {Name = ProcessProgramSelected, Index = (int)EventName.ProcessProgramSelected, LinkableVid = new[] {(int)DataVariables.DataName.SequenceID}}},
            {ProcessProgramCreated, new VIDItem() {Name = ProcessProgramCreated, Index = (int)EventName.ProcessProgramCreated, LinkableVid = new[] {(int)DataVariables.DataName.SequenceID}}},
            {SpoolingActivated, new VIDItem() {Name = SpoolingActivated, Index = (int)EventName.SpoolingActivated}},
            {SpoolingDeactivated, new VIDItem() {Name = SpoolingDeactivated, Index = (int)EventName.SpoolingDeactivated}},
            {SpoolingFailed, new VIDItem() {Name = SpoolingFailed, Index = (int)EventName.SpoolingFailed}},
            {EquipmentChangeToAuto, new VIDItem() {Name = EquipmentChangeToAuto, Index = (int)EventName.EquipmentChangeToAuto}},
            {EquipmentChangeToManual, new VIDItem() {Name = EquipmentChangeToManual, Index = (int)EventName.EquipmentChangeToManual}},
            {WAFER_LEFT_POSITION, new VIDItem() {Name = WAFER_LEFT_POSITION, Index = (int)EventName.WAFER_LEFT_POSITION, LinkableVid = new[] {(int)DataVariables.DataName.SubstID,(int)DataVariables.DataName.SubstLocID,(int)DataVariables.DataName.SubstLocState,3}}},
            {WAFER_ARRIVE_POSITION, new VIDItem() {Name = WAFER_ARRIVE_POSITION, Index = (int)EventName.WAFER_ARRIVE_POSITION, LinkableVid = new[] {(int)DataVariables.DataName.SubstID,(int)DataVariables.DataName.SubstLocID,(int)DataVariables.DataName.SubstLocState,3}}},
            {CARRIER_ARRIVED, new VIDItem() {Name = CARRIER_ARRIVED, Index = (int)EventName.CARRIER_ARRIVED, LinkableVid = new[] {(int)DataVariables.DataName.PortID,3}}},
            {CARRIER_REMOVED, new VIDItem() {Name = CARRIER_REMOVED, Index = (int)EventName.CARRIER_REMOVED, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_ID_READ, new VIDItem() {Name = CARRIER_ID_READ, Index = (int)EventName.CARRIER_ID_READ, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_ID_READ_FAILED, new VIDItem() {Name = CARRIER_ID_READ_FAILED, Index = (int)EventName.CARRIER_ID_READ_FAILED, LinkableVid = new[] { (int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_ID_WRITE, new VIDItem() {Name = CARRIER_ID_WRITE, Index = (int)EventName.CARRIER_ID_WRITE, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_ID_WRITE_FAILED, new VIDItem() {Name = CARRIER_ID_WRITE_FAILED, Index = (int)EventName.CARRIER_ID_WRITE_FAILED, LinkableVid = new[] {(int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_LOADED, new VIDItem() {Name = CARRIER_LOADED, Index = (int)EventName.CARRIER_LOADED, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.PortID, 3 }}},
            { CARRIER_UNLOADED, new VIDItem() {Name = CARRIER_UNLOADED, Index = (int)EventName.CARRIER_UNLOADED, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.PortID, 3 }}},
            { SLOT_MAP_AVAILABLE, new VIDItem() {Name = SLOT_MAP_AVAILABLE, Index = (int)EventName.SLOT_MAP_AVAILABLE, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID,(int)DataVariables.DataName.SlotMap, (int)DataVariables.DataName.PortID, (int)DataVariables.DataName.SlotMapList, 3 }}},
            { PortReadyToLoad, new VIDItem() {Name = PortReadyToLoad, Index = (int)EventName.PortReadyToLoad, LinkableVid = new[] {(int)DataVariables.DataName.PortID, 3 }}},
            { PortReadyToUnload, new VIDItem() {Name = PortReadyToUnload, Index = (int)EventName.PortReadyToUnload, LinkableVid = new[] {(int)DataVariables.DataName.PortID, 3 }}},
            { CarrierProcessStart, new VIDItem() {Name = CarrierProcessStart, Index = (int)EventName.CarrierProcessStart, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID,(int)DataVariables.DataName.PortID,3}}},
            {CarrierProcessComplete, new VIDItem() {Name = CarrierProcessComplete, Index = (int)EventName.CarrierProcessComplete, LinkableVid = new[] {(int)DataVariables.DataName.CarrierID,(int)DataVariables.DataName.PortID,3}}},
            {PortJobStarted, new VIDItem() {Name = PortJobStarted, Index = (int)EventName.PortJobStarted, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobStopped, new VIDItem() {Name = PortJobStopped, Index = (int)EventName.PortJobStopped, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobPaused, new VIDItem() {Name = PortJobPaused, Index = (int)EventName.PortJobPaused, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobResumed, new VIDItem() {Name = PortJobResumed, Index = (int)EventName.PortJobResumed, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobAborted, new VIDItem() {Name = PortJobAborted, Index = (int)EventName.PortJobAborted, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobFinished, new VIDItem() {Name = PortJobFinished, Index = (int)EventName.PortJobFinished, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortJobFailed, new VIDItem() {Name = PortJobFailed, Index = (int)EventName.PortJobFailed, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortMapFailed, new VIDItem() {Name = PortMapFailed, Index = (int)EventName.PortMapFailed, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortPPSelected, new VIDItem() {Name = PortPPSelected, Index = (int)EventName.PortPPSelected, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {PortPPSelectFailed, new VIDItem() {Name = PortPPSelectFailed, Index = (int)EventName.PortPPSelectFailed, LinkableVid = new[] {(int)DataVariables.DataName.LotID,(int)DataVariables.DataName.JobID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.RecipeID}}},
            {RecipeStart, new VIDItem() {Name = RecipeStart, Index = (int)EventName.RecipeStart, LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName,(int)DataVariables.DataName.SlotID,(int)DataVariables.DataName.ProcessWaferIdList,(int)DataVariables.DataName.ProcessCarrierIDList}}},
            {RecipeComplete, new VIDItem() {Name = RecipeComplete, Index = (int)EventName.RecipeComplete, LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName,(int)DataVariables.DataName.SlotID,(int)DataVariables.DataName.ProcessWaferIdList,(int)DataVariables.DataName.ProcessCarrierIDList}}},
            {RecipeStepStart, new VIDItem() {Name = RecipeStepStart, Index = (int)EventName.RecipeStepStart, LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.SlotID}}},
            {RecipeStepEnd, new VIDItem() {Name = RecipeStepEnd, Index = (int)EventName.RecipeStepEnd, LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName, (int)DataVariables.DataName.RecipeStepNumber, (int)DataVariables.DataName.SlotID}}},
            {RecipeFailed, new VIDItem() {Name = RecipeFailed, Index = (int)EventName.RecipeFailed,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName,(int)DataVariables.DataName.SlotID}}},
            {ChargeStart, new VIDItem() {Name = ChargeStart, Index = (int)EventName.ChargeStart,  LinkableVid = new[] {(int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.Clock}}},
            {ChargeEnd, new VIDItem() {Name = ChargeEnd, Index = (int)EventName.ChargeEnd,  LinkableVid = new[] {(int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.Clock, (int)DataVariables.DataName.BoatSlotMapList}}},
            {DischargeStart, new VIDItem() {Name = DischargeStart, Index = (int)EventName.DischargeStart,  LinkableVid = new[] {(int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.Clock, (int)DataVariables.DataName.BoatSlotMapList}}},
            {DischargeEnd, new VIDItem() {Name = DischargeEnd, Index = (int)EventName.DischargeEnd,  LinkableVid = new[] {(int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.Clock}}},
            {BatchLocOccupied, new VIDItem() {Name = BatchLocOccupied, Index = (int)EventName.BatchLocOccupied,  LinkableVid = new[] {(int)DataVariables.DataName.CJID, (int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.SlotMapList, (int)DataVariables.DataName.Clock}}},
            {BatchLocUnOccupied, new VIDItem() {Name = BatchLocUnOccupied, Index = (int)EventName.BatchLocUnOccupied,  LinkableVid = new[] {(int)DataVariables.DataName.CJID, (int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.SlotMapList, (int)DataVariables.DataName.Clock}}},
            {SideDummyStateAlarm, new VIDItem() {Name = SideDummyStateAlarm, Index = (int)EventName.SideDummyStateAlarm,  LinkableVid = new[] {(int)DataVariables.DataName.CarrierID}}},
            {ExtraDummyStateAlarm, new VIDItem() {Name = ExtraDummyStateAlarm, Index = (int)EventName.ExtraDummyStateAlarm,  LinkableVid = new[] {(int)DataVariables.DataName.CarrierID}}},
            {SideDummyStateWarning, new VIDItem() {Name = SideDummyStateWarning, Index = (int)EventName.SideDummyStateWarning,  LinkableVid = new[] {(int)DataVariables.DataName.CarrierID}}},
            {ExtraDummyStateWarning, new VIDItem() {Name = ExtraDummyStateWarning, Index = (int)EventName.ExtraDummyStateWarning,  LinkableVid = new[] {(int)DataVariables.DataName.CarrierID}}},
            {CarrierInStart, new VIDItem() {Name = CarrierInStart, Index = (int)EventName.CarrierInStart,  LinkableVid = new[] {(int)DataVariables.DataName.PortID, (int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.Usage, (int)DataVariables.DataName.BufferCapacitiyList, (int)DataVariables.DataName.BufferMaterialInfo, (int)DataVariables.DataName.Clock}}},
            {CarrierInEnd, new VIDItem() {Name = CarrierInEnd, Index = (int)EventName.CarrierInEnd,  LinkableVid = new[] {(int)DataVariables.DataName.PortID, (int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.Usage, (int)DataVariables.DataName.BufferCapacitiyList, (int)DataVariables.DataName.BufferMaterialInfo, (int)DataVariables.DataName.Clock}}},
            {CarrierOutStart, new VIDItem() {Name = CarrierOutStart, Index = (int)EventName.CarrierOutStart,  LinkableVid = new[] {(int)DataVariables.DataName.PortID, (int)DataVariables.DataName.CarrierID, (int)DataVariables.DataName.Usage, (int)DataVariables.DataName.BufferCapacitiyList, (int)DataVariables.DataName.BufferMaterialInfo, (int)DataVariables.DataName.Clock}}},
            {CarrierOutEnd, new VIDItem() {Name = CarrierOutEnd, Index = (int)EventName.CarrierOutEnd,  LinkableVid = new[] {(int)DataVariables.DataName.PortID, (int)DataVariables.DataName.CarrierID,
                (int)DataVariables.DataName.Usage,
                (int)DataVariables.DataName.BufferCapacitiyList,
                (int)DataVariables.DataName.BufferMaterialInfo,
                (int)DataVariables.DataName.PPIDList,
                (int)DataVariables.DataName.BatchLocID,
                (int)DataVariables.DataName.BoatID,
                (int)DataVariables.DataName.WaferIDList,
                (int)DataVariables.DataName.PrdVariableList,
                (int)DataVariables.DataName.CarrierIDList,
                (int)DataVariables.DataName.ProcessCarrierIDList,
                (int)DataVariables.DataName.EPTState,
                (int)DataVariables.DataName.PPStepChange,
                (int)DataVariables.DataName.LotID,
                (int)DataVariables.DataName.PPChangeName,
                (int)DataVariables.DataName.PPChangeStatus,
                (int)DataVariables.DataName.CJState,
                (int)DataVariables.DataName.AlarmID,
                (int)DataVariables.DataName.EventName,
            }}},
        };
    }
}