#include "rive/artboard.hpp"
#include "rive/animation/blend_animation.hpp"
#include "rive/animation/layer_state.hpp"
#include "rive/importers/layer_state_importer.hpp"
#include "rive/importers/artboard_importer.hpp"

using namespace rive;

StatusCode BlendAnimation::import(ImportStack& importStack) {
    auto importer = importStack.latest<LayerStateImporter>(LayerStateBase::typeKey);
    if (importer == nullptr) {
        return StatusCode::MissingObject;
    } else if (!importer->addBlendAnimation(this)) {
        return StatusCode::InvalidObject;
    }

    auto artboardImporter = importStack.latest<ArtboardImporter>(ArtboardBase::typeKey);
    if (artboardImporter == nullptr) {
        return StatusCode::MissingObject;
    }

    auto artboard = artboardImporter->artboard();
    size_t animationCount = artboard->animationCount();
    if ((size_t)animationId() < animationCount) {
        m_Animation = artboardImporter->artboard()->animation(animationId());
    }

    return Super::import(importStack);
}
