using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using MECF.Framework.Common.Equipment;
namespace Aitex.Sorter.Common
{
    public enum Motion
    {
        [EnumMember]
        Pick = 0,            
        [EnumMember]
        Place = 1,            
        [EnumMember]
        Exchange = 2,
        [EnumMember]
        Alignment = 3,
    }
    public enum Hand
    {
        [EnumMember]
        Blade1 = 0,            //Lower arm
        [EnumMember]
        Blade2 = 1,             //Upper arm
        [EnumMember]
        Both = 2,
        [EnumMember]
        None = 3,
    }
    public enum Flip
    {
        Upper=0,
        Down=1
    }
    public enum MoveType
    {
        Move,     //single move
        Swap,     //Single swap
        SPSP,     //double move seperate pick, seperate place
        SPDP,     //double move seperate pick, double place 
        DPSP,     //double move. double pick, seperate place
        DPDP,     //double move, double pick, double place
    }
    [Flags]
    public enum MoveOption
    {
        None = 0,       //0000
        Align = 1,      //0001
        ReadID = 2,     //0010
        ReadID2 = 4,    //0100
        Reader1 = 8,    //1000
        Reader2 = 16,   //0001 0000
        LoadLock1 = 32, //0010 0000
        LoadLock2 = 64, //0100 0000
        LoadLock3 = 128,//1000 0000
        LoadLock4 = 256,//0001 0000 0000
        Buffer = 512,   //0010 0000 0000
        Turnover = 1024, //0100 0000 0000 
        LoadLock5 = 2048, //1000 0000 0000 
        LoadLock6 = 4096, //0001 1000 0000 0000 
        LoadLock7 = 8192, //0010 1000 0000 0000 
        LoadLock8 = 16384 //0100 1000 0000 0000 
    }
    public enum LMReadOption
    {
        LMRead1 = 1,
        LMRead2 = 2
    }
    [DataContract]
    public class TransferInfo
    {
        /// 
        /// 源Wafer
        /// 
        [DataMember]
        public string WaferID
        {
            get; set;
        }
        /// 
        /// 源
        /// 
        [DataMember]
        public ModuleName Source
        {
            get;
            set;
        }
        /// 
        /// 源槽位
        /// 
        [DataMember]
        public int SourceSlot
        {
            get;
            set;
        }
        /// 
        /// 目的地
        /// 
        [DataMember]
        public ModuleName Station
        {
            get; set;
        }
        /// 
        /// 目的地槽位
        /// 
        [DataMember]
        public int Slot
        {
            get; set;
        }
        [DataMember]
        public MoveOption Option
        {
            get; set;
        }
        [DataMember]
        public bool PreAlign
        {
            get;
            set;
        }
        [DataMember]
        public double Angle
        {
            get;
            set;
        }
        [DataMember]
        public bool VerifyAny
        {
            get;
            set;
        }
        [DataMember]
        public bool VerifyLaserMaker
        {
            get;
            set;
        }
        [DataMember]
        public bool VerifyLM1Checksum
        {
            get;
            set;
        }
        [DataMember]
        public string LaserMaker
        {
            get;
            set;
        }
        [DataMember]
        public bool VerifyT7Code
        {
            get;
            set;
        }
        [DataMember]
        public bool VerifyLM2Checksum
        {
            get;
            set;
        }
        [DataMember]
        public string T7Code
        {
            get;
            set;
        }
        [DataMember]
        public List LM1JobFile
        { get; set; }
        [DataMember]
        public List LM2JobFile
        { get; set; }
        [DataMember]
        public LMReadOption LM1Reader
        { get; set; }
        [DataMember]
        public LMReadOption LM2Reader
        { get; set; }
        [DataMember]
        public bool PostAlign
        {
            get;
            set;
        }
        [DataMember]
        public double PostAlignAngle
        {
            get;
            set;
        }
    }
}