#ifndef _BODY_COMPONENT_H
#define _BODY_COMPONENT_H

#include <spinscale/puppetApplication.h>
#include <spinscale/component.h>
#include <mindComponent.h>
#include <functional>
#include <spinscale/callback.h>

namespace smo {

class Mind;

namespace body {

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

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

private:
	class InitializeReq;
	class FinalizeReq;
};

} // namespace body
} // namespace smo

#endif // _BODY_COMPONENT_H