#include "rive/shapes/path.hpp"
#include "rive/math/mat2d.hpp"
#include "rive/tess/tess_render_path.hpp"
#include "rive_file_reader.hpp"

class TestRenderPath : public rive::TessRenderPath {
public:
    std::vector<rive::Vec2D> vertices;
    std::vector<uint16_t> indices;

protected:
    virtual void addTriangles(rive::Span<const rive::Vec2D> vts,
                              rive::Span<const uint16_t> idx) override {
        vertices.insert(vertices.end(), vts.begin(), vts.end());
        indices.insert(indices.end(), idx.begin(), idx.end());
    }

    void setTriangulatedBounds(const rive::AABB& value) override {}
};

TEST_CASE("simple triangle path triangulates as expected", "[file]") {
    auto file = ReadRiveFile("../test/assets/triangle.riv");
    auto artboard = file->artboard();
    artboard->advance(0.0f);

    auto path = artboard->find<rive::Path>("triangle_path");
    REQUIRE(path != nullptr);
    TestRenderPath renderPath;
    path->buildPath(renderPath);

    rive::Mat2D identity;
    TestRenderPath shapeRenderPath;
    shapeRenderPath.addRenderPath(&renderPath, identity);
    shapeRenderPath.triangulate();
    REQUIRE(shapeRenderPath.vertices.size() == 4);
    REQUIRE(shapeRenderPath.indices.size() == 3);
    REQUIRE(shapeRenderPath.indices[0] == 2);
    REQUIRE(shapeRenderPath.indices[1] == 0);
    REQUIRE(shapeRenderPath.indices[2] == 1);
}