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