#include "bones/tendon.hpp"
#include "bones/bone.hpp"
#include "bones/skin.hpp"
#include "core_context.hpp"

using namespace rive;

StatusCode Tendon::onAddedDirty(CoreContext* context)
{
	Mat2D bind;
	bind[0] = xx();
	bind[1] = xy();
	bind[2] = yx();
	bind[3] = yy();
	bind[4] = tx();
	bind[5] = ty();

	if (!Mat2D::invert(m_InverseBind, bind))
	{
		return StatusCode::FailedInversion;
	}

	StatusCode code = Super::onAddedDirty(context);
	if (code != StatusCode::Ok)
	{
		return code;
	}
	auto coreObject = context->resolve(boneId());
	if (coreObject == nullptr || !coreObject->is<Bone>())
	{
		return StatusCode::MissingObject;
	}

	m_Bone = reinterpret_cast<Bone*>(coreObject);

	return StatusCode::Ok;
}

StatusCode Tendon::onAddedClean(CoreContext* context)
{
	if (!parent()->is<Skin>())
	{
		return StatusCode::MissingObject;
	}

	parent()->as<Skin>()->addTendon(this);

	return StatusCode::Ok;
}