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

#pragma once

#include "ISCW_UObject.h"
#include <memory>

using std::shared_ptr;

namespace Sourcify
{	
	class ISCW_UEdGraphPin;

	class ISCW_UEdGraphSchema : public virtual ISCW_UObject
	{
	public:
		virtual ~ISCW_UEdGraphSchema() = default;
		
		virtual shared_ptr<ISCW_UEdGraphSchema> ToUEdGraphSchemaPtr() = 0;
		virtual shared_ptr<const ISCW_UEdGraphSchema> ToUEdGraphSchemaPtr() const = 0;

		virtual bool TryCreateConnection(shared_ptr<ISCW_UEdGraphPin> A, shared_ptr<ISCW_UEdGraphPin> B) const = 0;

		virtual void SplitPin(shared_ptr<ISCW_UEdGraphPin> Pin, bool bNotify = true) const = 0;
		virtual void RecombinePin(shared_ptr<ISCW_UEdGraphPin> Pin) const = 0;
	};

	using ISCW_UEdGraphSchemaConstPtr = shared_ptr<const ISCW_UEdGraphSchema>;
	using ISCW_UEdGraphSchemaPtr = shared_ptr<ISCW_UEdGraphSchema>;
} // namespace Sourcify