#pragma once

#include <maya/MDagPath.h>
#include <maya/MSelectionList.h>
#include <maya/MStatus.h>
#include <maya/MString.h>
#include <maya/MFnDagNode.h>
#include <maya/MItDependencyGraph.h>
#include <maya/MItDependencyNodes.h>
#include <maya/MStatus.h>

MStatus GetMayaObject(std::string name, MObject& object);
MStatus GetMayaDagPath(std::string name, MDagPath& dagPath);
MStatus GetMayaDagPath(MObject& object, MDagPath& dagPath);

MObjectArray ListTypedNodes(MFn::Type filter = MFn::kInvalid);

MObjectArray GetTypeNodes(MObject rootNode,
                          MItDependencyGraph::Direction direction = MItDependencyGraph::kDownstream,
                          MFn::Type filter = MFn::kInvalid);
MObjectArray GetTypeNodes(MPlug rootPlug,
                          MItDependencyGraph::Direction direction = MItDependencyGraph::kDownstream,
                          MFn::Type filter = MFn::kInvalid);
MObjectArray GetTypeNodes(MPlug rootPlug, MString nodeTypeName,
                          MItDependencyGraph::Direction direction = MItDependencyGraph::kDownstream,
                          MFn::Type filter = MFn::kInvalid);
