#include "rive/constraints/targeted_constraint.hpp"
#include "rive/transform_component.hpp"
#include "rive/core_context.hpp"

using namespace rive;

bool TargetedConstraint::validate(CoreContext* context)
{
    if (!Super::validate(context))
    {
        return false;
    }
    auto coreObject = context->resolve(targetId());
    // If core object is not null and is not a TransformComponent it should
    // always be invalid
    if (coreObject != nullptr && !coreObject->is<TransformComponent>())
    {
        return false;
    }
    return !requiresTarget() || coreObject != nullptr;
}

StatusCode TargetedConstraint::onAddedDirty(CoreContext* context)
{
    StatusCode code = Super::onAddedDirty(context);
    if (code != StatusCode::Ok)
    {
        return code;
    }
    auto coreObject = context->resolve(targetId());
    if (requiresTarget() && coreObject == nullptr)
    {
        return StatusCode::MissingObject;
    }

#ifdef WITH_RIVE_EDITOR
    setTargetForEditor(static_cast<TransformComponent*>(coreObject));
#else
    m_Target = static_cast<TransformComponent*>(coreObject);
#endif

    return StatusCode::Ok;
}

void TargetedConstraint::buildDependencies()
{
    // Targeted constraints must have their constrained component (parent)
    // update after the target.
    if (auto* t = target())
    {
        t->addDependent(parent());
    }
}
