#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;

LinearAnimation BlendAnimation::m_EmptyAnimation;

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);
}
