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

#pragma once

#include "ISCW_FEdGraphPinType.h"
#include "SCW_Base.h"
#include <variant>
#include "EdGraph/EdGraphPin.h"

using std::variant;

namespace Sourcify
{
	class SCW_FEdGraphPinType : public SCW_Base, public ISCW_FEdGraphPinType
	{
	public:
		SCW_FEdGraphPinType(FEdGraphPinType* InEdGraphPinType);

		SCW_EPinContainerType GetContainerType() const override;

		wstring GetPinCategory() const override;
		
		wstring GetPinSubCategory() const override;

		ISCW_UObjectPtr GetPinSubCategoryObject() const override;

		ISCW_FSimpleMemberReferencePtr GetPinSubCategoryMemberReference() const override;
			
		ISCW_FEdGraphTerminalTypePtr GetPinValueType() const override;

		bool IsWeakPointer() const override;
		
		void MakeReadOnlyCopy() override;

		void SetPinCategory(const wstring& InCategory) const override;
		
		void SetPinSubCategory(const wstring& InSubCategory) const override;

		void SetPinSubCategoryObject(ISCW_UObjectPtr InObjectPtr) const override;

		FEdGraphPinType* ToFEdGraphPinType() const;

		ISCW_FEdGraphPinTypePtr ToFEdGraphPinTypePtr() override;
		ISCW_FEdGraphPinTypeConstPtr ToFEdGraphPinTypePtr() const override;

	protected:
		FEdGraphPinType* GetInternalPinType() const;

	private:
		variant<FEdGraphPinType*, FEdGraphPinType> EdGraphPinType;

	};
} // namespace Sourcify