#ifndef _RIVE_DRAWABLE_HPP_
#define _RIVE_DRAWABLE_HPP_
#include "rive/generated/drawable_base.hpp"
#include "rive/renderer.hpp"
#include <vector>

namespace rive {
    class ClippingShape;
    class Artboard;
    class DrawRules;

    class Drawable : public DrawableBase {
        friend class Artboard;

    private:
        std::vector<ClippingShape*> m_ClippingShapes;

        /// Used exclusively by the artboard;
        DrawRules* flattenedDrawRules = nullptr;
        Drawable* prev = nullptr;
        Drawable* next = nullptr;

    public:
        BlendMode blendMode() const { return (BlendMode)blendModeValue(); }
        bool clip(Renderer* renderer) const;
        virtual void draw(Renderer* renderer) = 0;
        void addClippingShape(ClippingShape* shape);
        inline const std::vector<ClippingShape*>& clippingShapes() const {
            return m_ClippingShapes;
        }

        const inline bool isHidden() const {
            // For now we have a single drawable flag, when we have more we can
            // make an actual enum for this.
            return (drawableFlags() & 0x1) == 0x1;
        }
    };
} // namespace rive

#endif