#include "rive/component.hpp"
#include "rive/constraints/scrolling/scroll_constraint.hpp"
#include "rive/artboard.hpp"
#include "rive/artboard_component_list.hpp"
#include "rive/layout_component.hpp"
#include "rive/layout/layout_participant.hpp"
#include "rive/nested_artboard.hpp"
#include "rive/nested_artboard_layout.hpp"
#include "rive/nested_artboard_leaf.hpp"
#include "rive/scripted/scripted_data_converter.hpp"
#include "rive/scripted/scripted_drawable.hpp"
#include "rive/scripted/scripted_layout.hpp"
#include "rive/scripted/scripted_transition.hpp"
#include "rive/scripted/scripted_path_effect.hpp"
#include "rive/text/text_input.hpp"

using namespace rive;

AdvancingComponent* AdvancingComponent::from(Core* component)
{
    switch (component->coreType())
    {
        case NestedArtboardLeaf::typeKey:
        case NestedArtboardLayout::typeKey:
        case NestedArtboard::typeKey:
            return component->as<NestedArtboard>();
        case LayoutComponent::typeKey:
            return component->as<LayoutComponent>();
        case LayoutParticipantBase::typeKey:
            return component->as<LayoutParticipant>();
        case Artboard::typeKey:
            return component->as<Artboard>();
        case ArtboardComponentListBase::typeKey:
            return component->as<ArtboardComponentList>();
        case ScrollConstraint::typeKey:
            return component->as<ScrollConstraint>();
        case TextInputBase::typeKey:
            return component->as<TextInput>();
        case ScriptedDataConverter::typeKey:
            return component->as<ScriptedDataConverter>();
        case ScriptedDrawable::typeKey:
            return component->as<ScriptedDrawable>();
        case ScriptedLayout::typeKey:
            return component->as<ScriptedLayout>();
        case ScriptedTransition::typeKey:
            return component->as<ScriptedTransition>();
        case ScriptedPathEffect::typeKey:
            return component->as<ScriptedPathEffect>();
    }
    return nullptr;
}