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