#include "rive/dependency_sorter.hpp"
#include "rive/component.hpp"

using namespace rive;

void DependencySorter::sort(Component* root, std::vector<Component*>& order) {
    order.clear();
    visit(root, order);
}

bool DependencySorter::visit(Component* component, std::vector<Component*>& order) {
    if (m_Perm.find(component) != m_Perm.end()) {
        return true;
    }
    if (m_Temp.find(component) != m_Temp.end()) {
        fprintf(stderr, "Dependency cycle!\n");
        return false;
    }

    m_Temp.emplace(component);

    auto dependents = component->dependents();
    for (auto dependent : dependents) {
        if (!visit(dependent, order)) {
            return false;
        }
    }
    m_Perm.emplace(component);
    order.insert(order.begin(), component);

    return true;
}