using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Edge.Core.Processor.Communicator;

namespace OPW_VaporRecoveryOnlineWatch_PressureGage
{
    public class StateMachineMessageCutter : IMessageCutter<byte[]>
    {
        public byte[] Message { get; private set; }

        public event EventHandler OnMessageCut;
        public event EventHandler<MessageCutterInvalidMessageReadEventArg> OnInvalidMessageRead;

        static NLog.Logger innerLogger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("PumpHandler");

        private string loggerAppendix = "OPW_VaporRecoveryOnlineWatch_PressureGage msgCutter ";
        private readonly List<byte> buffer = new List<byte>();
        /// <summary>
        /// </summary>
        public StateMachineMessageCutter()
        {
        }


        public void Feed(byte[] next)
        {
            for (int i = 0; i < next.Length; i++)
            {
                if ((next[i] == 0xFE && this.buffer.Count == 0)
                    || (next[i] != 0xFE && this.buffer.Count != 0))
                {
                    this.buffer.Add(next[i]);
                }

                if (this.buffer.Count == 7)
                {
                    this.Message = this.buffer.ToArray();
                    var safe = this.OnMessageCut;
                    safe?.Invoke(this, null);
                    this.buffer.Clear();
                }
            }
        }
    }
}