using Parser.BinaryParser;
using Parser.BinaryParser.MessageEntity;
using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming;

namespace WayneChina_IcCardReader_SinoChem.MessageEntity
{
    /// <summary>
    /// 数据包头:	    1 byte,0xFA
    /// 源地址: 		    1 byte,0x#0 / 0x#1, 地址的高4位为帧序列号,1~F之间循环,主从方独立序列号,如接收方收到相同的序列号,只应答ACK,不执行该命令
    /// 有效数据长度 : 	2 bytes,BCD,数值为N+1
    /// 命令字:		    1 byte,BCD
    /// 参数:		    N bytes
    /// 数据校验:	    2 bytes,CRC校验,校验数据为“源地址”到“参数”,低字节在前
    /// 总长度:         7+N bytes
    /// </summary>
    public class MessageTemplateLookup : IMessageTemplateLookup
    {
        public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
        {
            if (bytes.Length == 7 && bytes[4] == 0x00)
                return new HeartBeat();
            else if (bytes.Length == 7 && bytes[4] == 0x01)
                return new ACK();
            else if (bytes.Length == 8 && bytes[4] == 0x02)
                return new CardReaderStateEvent();
            else if (bytes.Length == 18 && bytes[4] == 0x03)
                return new SignDataResponse();
            else if (bytes.Length == 8 && bytes[4] == 0x05)
                return new CardExternalCheckErrorRequest();
            else if (bytes.Length == 39 && bytes[4] == 0x06)
                return new CardOnlineVerificationRequest();

            return null;
        }
    }
}