#include "rive/constraints/constraint.hpp"
#include "rive/container_component.hpp"
#include "rive/transform_component.hpp"
#include "rive/core_context.hpp"
#include "rive/math/mat2d.hpp"

using namespace rive;

StatusCode Constraint::onAddedClean(CoreContext* context) {
    if (!parent()->is<TransformComponent>()) {
        return StatusCode::InvalidObject;
    }

    parent()->as<TransformComponent>()->addConstraint(this);

    return StatusCode::Ok;
}

void Constraint::markConstraintDirty() { parent()->as<TransformComponent>()->markTransformDirty(); }

void Constraint::strengthChanged() { markConstraintDirty(); }

void Constraint::buildDependencies() {
    Super::buildDependencies();
    parent()->addDependent(this);
}

void Constraint::onDirty(ComponentDirt dirt) {
    // Whenever the constraint gets any dirt, make sure to mark the constrained
    // component dirty.
    markConstraintDirty();
}

static Mat2D identity;
const Mat2D& rive::getParentWorld(const TransformComponent& component) {
    auto parent = component.parent();
    if (parent->is<WorldTransformComponent>()) {
        return parent->as<WorldTransformComponent>()->worldTransform();
    }
    return identity;
}