#include "rive/draw_rules.hpp"
#include "rive/artboard.hpp"
#include "rive/core_context.hpp"
#include "rive/draw_target.hpp"

using namespace rive;

StatusCode DrawRules::onAddedDirty(CoreContext* context)
{
  StatusCode result = Super::onAddedDirty(context);
  if (result != StatusCode::Ok)
  {
    return result;
  }
  auto coreObject = context->resolve(drawTargetId());
  if (coreObject != nullptr && coreObject->is<DrawTarget>())
  {
#ifdef WITH_RIVE_EDITOR
    setActiveTargetForEditor(static_cast<DrawTarget*>(coreObject));
#else
    m_ActiveTarget = static_cast<DrawTarget*>(coreObject);
#endif
  }

  return StatusCode::Ok;
}

StatusCode DrawRules::onAddedClean(CoreContext* context)
{
  return StatusCode::Ok;
}

void DrawRules::drawTargetIdChanged()
{
  auto coreObject = artboard()->resolve(drawTargetId());
  DrawTarget* t = (coreObject != nullptr && coreObject->is<DrawTarget>())
                      ? static_cast<DrawTarget*>(coreObject)
                      : nullptr;
#ifdef WITH_RIVE_EDITOR
  setActiveTargetForEditor(t);
#else
  m_ActiveTarget = t;
#endif
  artboard()->addDirt(ComponentDirt::DrawOrder);
}
