#include "rive/animation/transition_number_condition.hpp"
#include "rive/animation/state_machine_input_instance.hpp"
#include "rive/animation/state_machine_number.hpp"
#include "rive/animation/transition_condition_op.hpp"

using namespace rive;

bool TransitionNumberCondition::validateInputType(
    const StateMachineInput* input) const
{
    // A null input is valid as the StateMachine can attempt to limp along if we
    // introduce new input types that old conditions are expected to handle in
    // newer runtimes. The older runtimes will just evaluate them to true.
    return input == nullptr || input->is<StateMachineNumber>();
}

bool TransitionNumberCondition::evaluate(const SMIInput* inputInstance) const
{
    if (inputInstance == nullptr)
    {
        return true;
    }
    auto numberInput = reinterpret_cast<const SMINumber*>(inputInstance);

    switch (op())
    {
        case TransitionConditionOp::equal:
            return numberInput->value() == value();
        case TransitionConditionOp::notEqual:
            return numberInput->value() != value();
        case TransitionConditionOp::lessThanOrEqual:
            return numberInput->value() <= value();
        case TransitionConditionOp::lessThan:
            return numberInput->value() < value();
        case TransitionConditionOp::greaterThanOrEqual:
            return numberInput->value() >= value();
        case TransitionConditionOp::greaterThan:
            return numberInput->value() > value();
    }
    return false;
}