#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