#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>())
	{
		m_ActiveTarget = reinterpret_cast<DrawTarget*>(coreObject);
	}

	return StatusCode::Ok;
}

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

void DrawRules::drawTargetIdChanged()
{
	auto coreObject = artboard()->resolve(drawTargetId());
	if (coreObject == nullptr || !coreObject->is<DrawTarget>())
	{
		m_ActiveTarget = nullptr;
	}
	else
	{
		m_ActiveTarget = reinterpret_cast<DrawTarget*>(coreObject);
	}
	artboard()->addDirt(ComponentDirt::DrawOrder);
}