#ifndef _BODY_COMPONENT_H
#define _BODY_COMPONENT_H

#include <component.h>
#include <functional>
#include <callback.h>

namespace smo {

class Mind;
class ComponentThread;

namespace body {

class Body
:	public MindComponent
{
public:
	Body(Mind &parent, const std::shared_ptr<ComponentThread> &thread);
	~Body() = default;

	typedef std::function<void(bool)> bodyLifetimeMgmtOpCbFn;
	void initializeReq(Callback<bodyLifetimeMgmtOpCbFn> callback);
	void finalizeReq(Callback<bodyLifetimeMgmtOpCbFn> callback);

private:
	class InitializeReq;
	class FinalizeReq;
};

} // namespace body
} // namespace smo

#endif // _BODY_COMPONENT_H