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

#pragma once

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

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

namespace Sourcify
{
	class ISCW_FProperty;

	class ISCW_UStruct : public virtual ISCW_UField
	{
	public:
		virtual ~ISCW_UStruct() = default;

		virtual shared_ptr<ISCW_FProperty> FindPropertyByName(const wstring& InName) const = 0;

		virtual const wchar_t* GetPrefixCPP() const = 0;

		virtual shared_ptr<ISCW_UStruct> GetSuperStruct() const = 0;

		virtual shared_ptr<ISCW_UStruct> ToISCW_UStructPtr() = 0;

		virtual shared_ptr<const ISCW_UStruct> ToISCW_UStructPtr() const = 0;
	};

	using ISCW_UStructConstPtr = shared_ptr<const ISCW_UStruct>;
	using ISCW_UStructPtr = shared_ptr<ISCW_UStruct>;
} // namespace Sourcify