#ifndef _RIVE_BACKBOARD_IMPORTER_HPP_
#define _RIVE_BACKBOARD_IMPORTER_HPP_

#include "rive/importers/import_stack.hpp"
#include <unordered_map>
#include <vector>

namespace rive
{
	class Artboard;
	class NestedArtboard;
	class Backboard;
	class FileAsset;
	class FileAssetReferencer;
	class BackboardImporter : public ImportStackObject
	{
	private:
		Backboard* m_Backboard;
		std::unordered_map<int, Artboard*> m_ArtboardLookup;
		std::vector<NestedArtboard*> m_NestedArtboards;
		std::vector<FileAsset*> m_FileAssets;
		std::vector<FileAssetReferencer*> m_FileAssetReferencers;
		int m_NextArtboardId;

	public:
		BackboardImporter(Backboard* backboard);
		void addArtboard(Artboard* artboard);
		void addMissingArtboard();
		void addNestedArtboard(NestedArtboard* artboard);
		void addFileAsset(FileAsset* asset);
		void addFileAssetReferencer(FileAssetReferencer* referencer);

		StatusCode resolve() override;
		const Backboard* backboard() const { return m_Backboard; }
	};
} // namespace rive
#endif
