#ifndef _RIVE_ARTBOARD_IMPORTER_HPP_
#define _RIVE_ARTBOARD_IMPORTER_HPP_

#include "rive/importers/import_stack.hpp"

namespace rive
{
	class Core;
	class Artboard;
	class LinearAnimation;
	class StateMachine;
	class ArtboardImporter : public ImportStackObject
	{
	private:
		Artboard* m_Artboard;

	public:
		ArtboardImporter(Artboard* artboard);
		void addComponent(Core* object);
		void addAnimation(LinearAnimation* animation);
		void addStateMachine(StateMachine* stateMachine);
		StatusCode resolve() override;
		const Artboard* artboard() const { return m_Artboard; }

		bool readNullObject() override;
	};
} // namespace rive
#endif
