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

#pragma once

#include "ISCW_UStruct.h"
#include <memory>
#include "SCW_UField.h"
#include <string>

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

class UStruct;

namespace Sourcify
{
	class ISCW_FProperty;

	class SCW_UStruct : public SCW_UField, public virtual ISCW_UStruct
	{
	public:
		SCW_UStruct(UStruct* InScriptStruct);

		shared_ptr<ISCW_FProperty> FindPropertyByName(const wstring& InName) const override;

		const wchar_t* GetPrefixCPP() const override;

		shared_ptr<ISCW_UStruct> GetSuperStruct() const override;

		shared_ptr<ISCW_UStruct> ToISCW_UStructPtr() override;

		shared_ptr<const ISCW_UStruct> ToISCW_UStructPtr() const override;

		UStruct* ToUStructPtr() const;

	protected:
		UStruct* Struct;
	};
} // namespace Sourcify