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