/*
 * Copyright 2022 Rive
 */

#ifndef _RIVE_FACTORY_HPP_
#define _RIVE_FACTORY_HPP_

#include "rive/renderer.hpp"
#include "rive/render_text.hpp"
#include "rive/refcnt.hpp"
#include "rive/span.hpp"
#include "rive/math/aabb.hpp"
#include "rive/math/mat2d.hpp"

#include <cmath>
#include <stdio.h>
#include <cstdint>

namespace rive {

    class Factory {
    public:
        Factory() {}
        virtual ~Factory() {}

        virtual rcp<RenderBuffer> makeBufferU16(Span<const uint16_t>) = 0;
        virtual rcp<RenderBuffer> makeBufferU32(Span<const uint32_t>) = 0;
        virtual rcp<RenderBuffer> makeBufferF32(Span<const float>) = 0;

        virtual rcp<RenderShader> makeLinearGradient(float sx,
                                                     float sy,
                                                     float ex,
                                                     float ey,
                                                     const ColorInt colors[], // [count]
                                                     const float stops[],     // [count]
                                                     size_t count,
                                                     RenderTileMode,
                                                     const Mat2D* localMatrix = nullptr) = 0;

        virtual rcp<RenderShader> makeRadialGradient(float cx,
                                                     float cy,
                                                     float radius,
                                                     const ColorInt colors[], // [count]
                                                     const float stops[],     // [count]
                                                     size_t count,
                                                     RenderTileMode,
                                                     const Mat2D* localMatrix = nullptr) = 0;

        // Returns a full-formed RenderPath -- can be treated as immutable
        virtual std::unique_ptr<RenderPath>
        makeRenderPath(Span<const Vec2D> points, Span<const PathVerb> verbs, FillRule) = 0;

        virtual std::unique_ptr<RenderPath> makeEmptyRenderPath() = 0;

        virtual std::unique_ptr<RenderPaint> makeRenderPaint() = 0;

        virtual std::unique_ptr<RenderImage> decodeImage(Span<const uint8_t>) = 0;

        virtual rcp<RenderFont> decodeFont(Span<const uint8_t>) { return nullptr; }
    };

} // namespace rive
#endif
