#ifndef _RIVE_STATE_MACHINE_LAYER_HPP_
#define _RIVE_STATE_MACHINE_LAYER_HPP_
#include "generated/animation/state_machine_layer_base.hpp"
#include <stdio.h>
#include <vector>

namespace rive
{
	class LayerState;
	class StateMachineLayerImporter;
	class AnyState;
	class EntryState;
	class ExitState;
	class StateMachineLayer : public StateMachineLayerBase
	{
		friend class StateMachineLayerImporter;

	private:
		std::vector<LayerState*> m_States;
		AnyState* m_Any = nullptr;
		EntryState* m_Entry = nullptr;
		ExitState* m_Exit = nullptr;

		void addState(LayerState* state);

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

		StatusCode import(ImportStack& importStack) override;

		const AnyState* anyState() const { return m_Any; }
		const EntryState* entryState() const { return m_Entry; }
		const ExitState* exitState() const { return m_Exit; }

#ifdef TESTING
		size_t stateCount() const { return m_States.size(); }
		LayerState* state(size_t index) const
		{
			if (index < m_States.size())
			{
				return m_States[index];
			}
			return nullptr;
		}
#endif
	};
} // namespace rive

#endif