#include <rive/core/binary_reader.hpp>
#include <rive/file.hpp>
#include <rive/node.hpp>
#include <rive/shapes/clipping_shape.hpp>
#include <rive/shapes/rectangle.hpp>
#include <rive/shapes/image.hpp>
#include <rive/shapes/mesh.hpp>
#include <rive/assets/image_asset.hpp>
#include <rive/relative_local_asset_resolver.hpp>
#include "no_op_renderer.hpp"
#include "rive_file_reader.hpp"
#include <catch.hpp>
#include <cstdio>

TEST_CASE("image with mesh loads correctly", "[mesh]") {
    RiveFileReader reader("../../test/assets/tape.riv");
    auto file = reader.file();

    auto node = file->artboard()->find("Tape body.png");
    REQUIRE(node != nullptr);
    REQUIRE(node->is<rive::Image>());
    auto tape = node->as<rive::Image>();
    REQUIRE(tape->imageAsset() != nullptr);
    REQUIRE(tape->imageAsset()->decodedByteSize == 70903);
    REQUIRE(tape->mesh() != nullptr);
    REQUIRE(tape->mesh()->vertices().size() == 24);
    REQUIRE(tape->mesh()->indices()->size() == 31 * 3); // Expect 31 triangles.
}

TEST_CASE("duplicating a mesh shares the indices", "[mesh]") {
    RiveFileReader reader("../../test/assets/tape.riv");
    auto file = reader.file();

    auto instance1 = file->artboard()->instance();
    auto instance2 = file->artboard()->instance();
    auto instance3 = file->artboard()->instance();

    auto node1 = instance1->find("Tape body.png");
    auto node2 = instance2->find("Tape body.png");
    auto node3 = instance3->find("Tape body.png");
    REQUIRE(node1 != nullptr);
    REQUIRE(node2 != nullptr);
    REQUIRE(node3 != nullptr);
    REQUIRE(node1->is<rive::Image>());
    REQUIRE(node2->is<rive::Image>());
    REQUIRE(node3->is<rive::Image>());

    auto tape1 = node1->as<rive::Image>();
    auto tape2 = node2->as<rive::Image>();
    auto tape3 = node3->as<rive::Image>();
    REQUIRE(tape1->imageAsset() != nullptr);
    REQUIRE(tape1->mesh() != nullptr);
    REQUIRE(tape2->imageAsset() != nullptr);
    REQUIRE(tape2->mesh() != nullptr);
    REQUIRE(tape3->imageAsset() != nullptr);
    REQUIRE(tape3->mesh() != nullptr);

    REQUIRE(tape1->mesh()->indices()->size() == 31 * 3);
    REQUIRE(tape2->mesh()->indices()->size() == 31 * 3);
    REQUIRE(tape3->mesh()->indices()->size() == 31 * 3);

    // Important part, make sure they're all actually the same reference.
    REQUIRE(tape1->mesh()->indices() == tape2->mesh()->indices());
    REQUIRE(tape2->mesh()->indices() == tape3->mesh()->indices());

    delete instance1;
    delete instance2;
    delete instance3;
}
