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

#pragma once

#include "ISCW_EngineVersionComparison.h"

#if ISCW_UE_VERSION_NEWER_THAN_OR_EQUAL(5, 6, 0)

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

using std::shared_ptr;
using std::wstring;

namespace Sourcify
{	
	class ISCW_FMetaData
	{
	public:
		virtual ~ISCW_FMetaData() = default;

		virtual wstring GetValue(ISCW_UObjectConstPtr Object, const wstring& Key) const = 0;

		virtual void SetValue(ISCW_UObjectPtr Object, const wstring& Key, const wstring& Value) = 0;

		virtual shared_ptr<ISCW_FMetaData> ToFMetaDataPtr() = 0;
		virtual shared_ptr<const ISCW_FMetaData> ToFMetaDataConstPtr() const = 0;
	};

	using ISCW_FMetaDataConstPtr = shared_ptr<const ISCW_FMetaData>;
	using ISCW_FMetaDataPtr = shared_ptr<ISCW_FMetaData>;
} // namespace Sourcify

#endif // ISCW_UE_VERSION_NEWER_THAN_OR_EQUAL(5, 6, 0)