#ifndef _SCENE_H
#define _SCENE_H

#include <cstdint>
#include <map>
#include <mentalEntity.h>
#include <simulator/commandList.h>

namespace smo {
namespace simulator {

class Scene
{
public:
    using Id = uint32_t;

    Scene(void) :
        cursor(commands)
    {}
    ~Scene() = default;

    bool hasMentalEntity(const MentalEntity::Id menty) const;
    MentalEntity::Id addMentalEntity(const MentalEntity& menty);
    void replaceMentalEntity(const MentalEntity::Id menty, const MentalEntity& newMenty);
    void removeMentalEntity(const MentalEntity::Id menty);

    void executeInd(void);
    CommandList::Cursor haltInd(void);

private:
    std::map<MentalEntity::Id, MentalEntity &> menties;
    CommandList commands;
    CommandList::Cursor cursor;
};

} // namespace simulator
} // namespace smo

#endif

