#ifndef _SMO_MIND_MANAGER_H
#define _SMO_MIND_MANAGER_H

#include <config.h>
#include <memory>
#include <vector>
#include <mind.h>

namespace smo {
namespace mind {

/**	EXPLANATION:
 * MindManager is responsible for managing the lifecycle of all minds.
 * It is responsible for creating, destroying, and managing the minds.
 *
 * For now it does nothing since we haven't yet added support for multiple
 * minds.
 */
class MindManager
{
public:
	MindManager(void) = default;
	~MindManager(void) = default;

	static MindManager& getInstance()
	{
		static MindManager instance;
		return instance;
	}

public:
	void initialize(void) {};
	void finalize(void) {};

	std::shared_ptr<Mind> getMind(void) const;
	void addMind(const std::shared_ptr<Mind>& mind);
	void removeMind(const std::shared_ptr<Mind>& mind);

public:
	std::vector<std::shared_ptr<Mind>> minds;
};

} // namespace mind
} // namespace smo

#endif // _SMO_MIND_MANAGER_H
