#include "rive/importers/layer_state_importer.hpp"
#include "rive/animation/state_transition.hpp"
#include "rive/animation/layer_state.hpp"
#include "rive/animation/blend_state.hpp"
#include "rive/animation/blend_state_transition.hpp"

using namespace rive;

LayerStateImporter::LayerStateImporter(LayerState* state) : m_State(state) {}
void LayerStateImporter::addTransition(StateTransition* transition)
{
	m_State->addTransition(transition);
}

bool LayerStateImporter::addBlendAnimation(BlendAnimation* animation)
{
	if (!m_State->is<BlendState>())
	{
		return false;
	}
	auto blendState = m_State->as<BlendState>();

	blendState->addAnimation(animation);
	return true;
}

StatusCode LayerStateImporter::resolve()
{
	if (m_State->is<BlendState>())
	{
		auto blendState = m_State->as<BlendState>();
		for (auto transition : blendState->m_Transitions)
		{
			if (!transition->is<BlendStateTransition>())
			{
				continue;
			}

			auto blendStateTransition = transition->as<BlendStateTransition>();
			auto exitId = blendStateTransition->exitBlendAnimationId();
			if (exitId >= 0 && exitId < blendState->m_Animations.size())
			{
				blendStateTransition->m_ExitBlendAnimation =
				    blendState->m_Animations[exitId];
			}
		}
	}
	return StatusCode::Ok;
}