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

#pragma once

#pragma warning(disable: 4250)

#include <map>
#include <memory>
#include <string>

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

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

		virtual bool GetBoolMetaData(const wstring& Key) const = 0;
		
		virtual map<wstring, wstring> GetMetaDataMap() const = 0;

		virtual bool IsNative() const = 0;

		virtual bool Less(const ISCW_FField& Other) const = 0;

		virtual bool ISCW_Equals(const ISCW_FField& Other) const = 0;

		// To handle cases where a null shared_ptr is used to represent a null FField pointer
		virtual bool ISCW_Equals(const shared_ptr<const ISCW_FField> Other) const = 0;

		virtual size_t GetHash() const = 0;

		virtual shared_ptr<ISCW_FField> ToFFieldPtr() = 0;
		virtual shared_ptr<const ISCW_FField> ToFFieldPtr() const = 0;
	};

	using ISCW_FFieldConstPtr = shared_ptr<const ISCW_FField>;
	using ISCW_FFieldPtr = shared_ptr<ISCW_FField>;
} // namespace Sourcify

#include "ISCW_Helpers.h"