#include "rive/parent_traversal.hpp"
#include "rive/artboard.hpp"
#include "rive/artboard_host.hpp"
#include "rive/component.hpp"
#include "rive/container_component.hpp"

using namespace rive;

ParentTraversal::ParentTraversal(Component* start)
    : m_current(start != nullptr ? start->parent() : nullptr)
    , m_currentArtboard(start != nullptr ? start->artboard() : nullptr)
{}

ContainerComponent* ParentTraversal::next()
{
  // Reset boundary crossing state
  m_didCrossBoundary = false;
  m_crossingHost = nullptr;
  m_sourceArtboard = nullptr;

  if (m_current == nullptr)
  {
    return nullptr;
  }

  ContainerComponent* result = m_current;

  // Advance to next parent
  if (m_current->parent() != nullptr)
  {
    m_current = m_current->parent();
  }
  else if (m_currentArtboard != nullptr && m_currentArtboard->host() != nullptr)
  {
    // No direct parent - try crossing artboard boundary
    auto* host = m_currentArtboard->host();
    auto* hostComponent = host->hostComponent();

    if (hostComponent != nullptr && hostComponent->parent() != nullptr)
    {
      // Record boundary crossing info before updating state
      m_didCrossBoundary = true;
      m_crossingHost = host;
      m_sourceArtboard = m_currentArtboard;

      m_current = hostComponent->parent();
      m_currentArtboard = host->parentArtboard();
    }
    else
    {
      m_current = nullptr;
    }
  }
  else
  {
    m_current = nullptr;
  }

  return result;
}
