#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);
}