#include <rive/file.hpp>
#include <rive/node.hpp>
#include <rive/animation/cubic_value_interpolator.hpp>
#include "catch.hpp"
#include "rive_file_reader.hpp"
#include <cstdio>

TEST_CASE("test cubic value load and interpolate properly", "[file]")
{
    auto file = ReadRiveFile("../../test/assets/cubic_value_test.riv");

    auto artboard = file->artboard();
    REQUIRE(artboard != nullptr);

    auto greyRect = artboard->find<rive::Node>("grey_rectangle");
    REQUIRE(greyRect != nullptr);

    int interpolatorCount = 0;
    for (auto object : artboard->objects())
    {
        if (object->coreType() == rive::CubicValueInterpolatorBase::typeKey)
        {
            interpolatorCount++;
        }
    }

    REQUIRE(interpolatorCount == 3);

    auto animation = artboard->animation("Timeline 1");
    REQUIRE(animation != nullptr);
    // Go to frame 15.
    animation->apply(artboard, 15.0f / animation->fps(), 1.0f);
    REQUIRE(greyRect->x() == Approx(290.71f));

    // Go to frame 11.
    animation->apply(artboard, 11.0f / animation->fps(), 1.0f);
    REQUIRE(greyRect->x() == Approx(363.01f));
}
