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

#pragma once

#include "ISCW_UClass.h"
#include "ISCW_UField.h"
#include "SCW_UObject.h"
#include <string>

class UField;

using std::wstring;

namespace Sourcify
{
	class SCW_UField : public SCW_UObject, public virtual ISCW_UField
	{
	public:
		SCW_UField(UField* InField);

		bool GetBoolMetaData(const wstring& Key) const override;

		wstring GetMetaData(const wstring& Key) const override;

		ISCW_UClassPtr GetOwnerClass() const override;

		bool HasMetaData(const wstring& Key) const override;
		
		bool IsValidLowLevel() const override;

		shared_ptr<ISCW_UField> ToUFieldPtr() override;

		shared_ptr<const ISCW_UField> ToUFieldPtr() const override;

	protected:
		UField* Field;
	};
} // namespace Sourcify