#ifndef MRNTT_BODYMAP_BODYMESSAGE_H
#define MRNTT_BODYMAP_BODYMESSAGE_H

#include <vector>
#include <cstdint>

#include <bodyMap/limb.h>
#include <bodyMap/part.h>

namespace mrntt {
namespace bodyMap {

class BodyMessage
{
public:
    BodyMessage() = default;
    ~BodyMessage() = default;
};

class SpotImpactEntry
{
public:
    enum class ReportType
    {
        PRESSURE,
        PAIN,
        PLEASURE,
        HEAT,
        COLD
    };

    SpotImpactEntry(uint32_t _spot, ReportType _type, uint32_t _value)
        : spot(_spot), type(_type), value(_value)
    {}
    ~SpotImpactEntry() = default;

public:
    uint32_t spot;
    ReportType type;
    uint32_t value;
};

class SpotImpactInd : public BodyMessage
{
public:
    SpotImpactInd(Part &_part) : part(_part) {}
    ~SpotImpactInd() = default;

public:
    Part &part;
    std::vector<SpotImpactEntry> entries;
};

class PartMsg : public BodyMessage
{
public:
    PartMsg(const Part& _part) : part(_part) {}

public:
    const Part& part;
};

} // namespace bodyMap
} // namespace mrntt

#endif // MRNTT_BODYMAP_BODYMESSAGE_H