// Copyright (c) 2024 Codemongous LLC. All Rights Reserved.

#pragma once

#include "ISCW_UEdGraph.h"
#include "SCW_UObject.h"

class UEdGraph;

namespace Sourcify
{
	class SCW_UEdGraph : public SCW_UObject, public virtual ISCW_UEdGraph
	{
	public:
		SCW_UEdGraph(UEdGraph* InEdGraph);

		UEdGraph* ToUEdGraph() const;

		ISCW_UEdGraphPtr ToUEdGraphPtr() override;

		ISCW_UEdGraphConstPtr ToUEdGraphPtr() const override;

		void GetAllChildrenGraphs(vector<ISCW_UEdGraphPtr>& OutGraphs) const override;

		vector<ISCW_UEdGraphNodePtr> GetNodes() const override;

		void GetNodesOfClass_UK2Node_AddComponent(vector<ISCW_UK2Node_AddComponentPtr>& OutNodes) const override;

		void GetNodesOfClass_UK2Node_AddDelegate(vector<ISCW_UK2Node_AddDelegatePtr>& OutNodes) const override;
		
		void GetNodesOfClass_UK2Node_AssignDelegate(vector<ISCW_UK2Node_AssignDelegatePtr>& OutNodes) const override;
		
		void GetNodesOfClass_UK2Node_CallFunction(vector<ISCW_UK2Node_CallFunctionPtr>& OutNodes) const override;
		
		void GetNodesOfClass_UK2Node_ComponentBoundEvent(vector<ISCW_UK2Node_ComponentBoundEventPtr>& OutNodes) const override;
		
		void GetNodesOfClass_UK2Node_CustomEvent(vector<ISCW_UK2Node_CustomEventPtr>& OutNodes) const override;

		void GetNodesOfClass_UK2Node_Event(vector<ISCW_UK2Node_EventPtr>& OutNodes) const override;
		
		void GetNodesOfClass_UK2Node_FunctionEntry(vector<ISCW_UK2Node_FunctionEntryPtr>& OutNodes) const override;

		void GetNodesOfClass_UK2Node_Variable(vector<ISCW_UK2Node_VariablePtr>& OutNodes) const override;

		bool ContainsNode(ISCW_UEdGraphNodeConstPtr Node) const override;

		void InvalidateInterfaceGuid() const override;

		void SetAllowDeletion(bool InAllowDeletion) const override;

	protected:
		UEdGraph* EdGraph;
	};
} // namespace Sourcify