#ifndef _RIVE_LAYER_STATE_HPP_
#define _RIVE_LAYER_STATE_HPP_
#include "rive/generated/animation/layer_state_base.hpp"
#include <stdio.h>
#include <vector>

namespace rive
{
	class StateTransition;
	class LayerStateImporter;
	class StateMachineLayerImporter;
	class StateInstance;

	class LayerState : public LayerStateBase
	{
		friend class LayerStateImporter;
		friend class StateMachineLayerImporter;

	private:
		std::vector<StateTransition*> m_Transitions;
		void addTransition(StateTransition* transition);

	public:
		~LayerState();
		StatusCode onAddedDirty(CoreContext* context) override;
		StatusCode onAddedClean(CoreContext* context) override;

		StatusCode import(ImportStack& importStack) override;

		size_t transitionCount() const { return m_Transitions.size(); }
		StateTransition* transition(size_t index) const
		{
			if (index < m_Transitions.size())
			{
				return m_Transitions[index];
			}
			return nullptr;
		}

		/// Make an instance of this state that can be advanced and applied by
		/// the state machine when it is active or being transitioned from.
		virtual StateInstance* makeInstance() const;
	};
} // namespace rive

#endif