#include "rive/animation/blend_animation_direct.hpp"
#include "rive/animation/state_machine.hpp"
#include "rive/animation/state_machine_number.hpp"
#include "rive/importers/state_machine_importer.hpp"

using namespace rive;

StatusCode BlendAnimationDirect::onAddedDirty(CoreContext* context)
{
	return StatusCode::Ok;
}

StatusCode BlendAnimationDirect::onAddedClean(CoreContext* context)
{
	return StatusCode::Ok;
}

StatusCode BlendAnimationDirect::import(ImportStack& importStack)
{
	auto stateMachineImporter =
	    importStack.latest<StateMachineImporter>(StateMachine::typeKey);
	if (stateMachineImporter == nullptr)
	{
		return StatusCode::MissingObject;
	}

	// Make sure the inputId doesn't overflow the input buffer.
	if (inputId() < 0 ||
	    inputId() >= stateMachineImporter->stateMachine()->inputCount())
	{
		return StatusCode::InvalidObject;
	}
	auto input = stateMachineImporter->stateMachine()->input((size_t)inputId());
	if (input == nullptr || !input->is<StateMachineNumber>())
	{
		return StatusCode::InvalidObject;
	}
	return Super::import(importStack);
}