#include "rive/constraints/distance_constraint.hpp"
#include "rive/bones/bone.hpp"
#include "rive/artboard.hpp"
#include <algorithm>

using namespace rive;

enum class Mode
{
    Closer = 0,
    Further = 1,
    Exact = 2
};

void DistanceConstraint::constrain(TransformComponent* component)
{
    if (m_Target == nullptr)
    {
        return;
    }

    const Vec2D targetTranslation = m_Target->worldTranslation();
    const Vec2D ourTranslation = component->worldTranslation();

    Vec2D toTarget = ourTranslation - targetTranslation;
    float currentDistance = toTarget.length();

    switch (static_cast<Mode>(modeValue()))
    {
        case Mode::Closer:
            if (currentDistance < distance())
            {
                return;
            }
            break;
        case Mode::Further:
            if (currentDistance > distance())
            {
                return;
            }
            break;
        case Mode::Exact:
            break;
    }
    if (currentDistance < 0.001f)
    {
        return;
    }

    toTarget *= (distance() / currentDistance);

    Mat2D& world = component->mutableWorldTransform();
    Vec2D position = targetTranslation + toTarget;
    position = Vec2D::lerp(ourTranslation, position, strength());
    world[4] = position.x;
    world[5] = position.y;
}
