#include "animation/blend_animation_direct.hpp"
#include "animation/state_machine.hpp"
#include "animation/state_machine_number.hpp"
#include "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);
}