#ifndef _RIVE_IMAGE_HPP_
#define _RIVE_IMAGE_HPP_

#include "rive/hit_info.hpp"
#include "rive/generated/shapes/image_base.hpp"
#include "rive/assets/file_asset_referencer.hpp"

namespace rive {
    class ImageAsset;
    class Mesh;
    class Image : public ImageBase, public FileAssetReferencer {
    private:
        ImageAsset* m_ImageAsset = nullptr;
        Mesh* m_Mesh = nullptr;

    public:
        Mesh* mesh() const;
        void setMesh(Mesh* mesh);
        ImageAsset* imageAsset() const { return m_ImageAsset; }
        void draw(Renderer* renderer) override;
        Core* hitTest(HitInfo*, const Mat2D&) override;
        StatusCode import(ImportStack& importStack) override;
        void assets(const std::vector<FileAsset*>& assets) override;
        Core* clone() const override;
    };
} // namespace rive

#endif
