#ifndef SERIAL_MESSAGE_H
#define SERIAL_MESSAGE_H

#include <Streaming.h>
#include "Component.h"

// Message struct:  << id,verb,flags,version,payload >>
// Example :<<1;2;0;1;Power:on:1>>

class SerialMessage : public Component
{

public:
    SerialMessage(Stream &_stream) : stream(_stream),
                                     Component("SerialMessage", 0, Component::COMPONENT_DEFAULT, (Component *)owner),
                                     msg(new Message(0, 0, 0, 0))
    {
    }

    struct Message
    {
    public:
        int id;
        uchar verb;
        int flags;
        uchar version;
        const char *payload;
        millis_t ts;
        Message(int _id, int _verb, int _flags, int _version) : id(_id),
                                                                verb(_verb),
                                                                flags(_flags),
                                                                version(_version) {}
    };

    short loop();
    Message *read();
    Message *msg;
    Message *parse(const char *string);
    Vector<Message *> messages;

    void readMessages();
    short setup();

protected:
    Stream &stream;
};

#endif