#include "rive/animation/keyframe_interpolator.hpp"
#include "rive/artboard.hpp"
#include "rive/backboard.hpp"
#include "rive/core.hpp"
#include "rive/importers/artboard_importer.hpp"
#include "rive/importers/backboard_importer.hpp"
#include "rive/importers/import_stack.hpp"
#include "rive/layout_component.hpp"

using namespace rive;

InterpolatorHost* InterpolatorHost::from(Core* component)
{
  switch (component->coreType())
  {
    case LayoutComponent::typeKey:
      return component->as<LayoutComponent>();
    default:
      return nullptr;
  }
  return nullptr;
}

StatusCode KeyFrameInterpolator::import(ImportStack& importStack)
{
  // Inside an artboard, File::readObjects already put this in the artboard's
  // object list (see claimsArtboardSlot).
  auto artboardImporter = importStack.latest<ArtboardImporter>(
      ArtboardBase::typeKey);
  if (artboardImporter == nullptr)
  {
    auto backboardImporter = importStack.latest<BackboardImporter>(
        BackboardBase::typeKey);
    if (backboardImporter != nullptr)
    {
      backboardImporter->addInterpolator(this);
    }
    else
    {
      return StatusCode::MissingObject;
    }
  }
  return Super::import(importStack);
}