#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;
}