#ifndef _RIVE_SHAPE_HPP_
#define _RIVE_SHAPE_HPP_
#include "rive/generated/shapes/shape_base.hpp"
#include "rive/shapes/path_composer.hpp"
#include "rive/shapes/shape_paint_container.hpp"
#include <vector>

namespace rive
{
	class Path;
	class PathComposer;
	class Shape : public ShapeBase, public ShapePaintContainer
	{
	private:
		PathComposer m_PathComposer;
		std::vector<Path*> m_Paths;

		bool m_WantDifferencePath = false;

	public:
		Shape();
		void buildDependencies() override;
		void addPath(Path* path);
		std::vector<Path*>& paths() { return m_Paths; }

		bool wantDifferencePath() const { return m_WantDifferencePath; }

		void update(ComponentDirt value) override;
		void draw(Renderer* renderer) override;

		PathComposer* pathComposer() const
		{
			return (PathComposer*)&m_PathComposer;
		}

		void pathChanged();
		void addDefaultPathSpace(PathSpace space);
		StatusCode onAddedDirty(CoreContext* context) override;
	};
} // namespace rive

#endif