using Edge.Core.Parser.BinaryParser;
using Edge.Core.Parser.BinaryParser.MessageEntity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VeederRoot_ATG_Console.MessageEntity.Incoming;

namespace VeederRoot_ATG_Console
{
    public class MessageTemplateLookup : IMessageTemplateLookup
    {
        public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
        {
            // skip SOH, and take 4 digits like i201 or I201.
            string functionCodeString = Encoding.ASCII.GetString(bytes.Skip(1).Take(4).ToArray());
            switch (functionCodeString)
            {
                case "9999":
                    return new AtgConsoleCannotUnderstoodPreviousMsgResponse();
                case "i201":
                case "I201": return new QueryInTankInventoryReportResponse();
                case "i205":
                case "I205": return new QueryInTankStatusReportResponse();
                case "i20C":
                case "I20C": return new QueryInTankMostRecentDeliveryReportResponse();
                case "s505":
                case "S505":
                case "i517":
                case "I517":
                case "s517":
                case "S517":
                    return new QueryOrSetSystemTypeAndLanguageFlagsResponse();
                case "i607":
                case "I607": return new QueryOrSetTankDiameterResponse();
                case "i602":
                case "I602": return new QueryOrSetTankProductLabelResponse();
                case "s501":
                case "S501":
                case "i501":
                case "I501": return new QueryOrSetTimeOfDayResponse();
                case "i101":
                case "I101": return new QuerySystemStatusReportResponse();
                case "iA01":
                case "IA01": return new QueryInTankDiagnosticReportResponse();
            }

            throw new InvalidOperationException("Unknown incoming message with functionCodeString: " + (functionCodeString ?? ""));
        }
    }
}