#include "rive/bones/tendon.hpp"
#include "rive/bones/bone.hpp"
#include "rive/bones/skin.hpp"
#include "rive/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;
}