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

#pragma once

#include "ISCW_UClass.h"
#include <memory>
#include <vector>

using std::shared_ptr;
using std::vector;

namespace Sourcify
{
	class ISCW_UActorComponent;
	class ISCW_UScriptStruct;
	class ISCW_USimpleConstructionScript;

	class ISCW_UBlueprintGeneratedClass : public virtual ISCW_UClass
	{
	public:
		virtual ~ISCW_UBlueprintGeneratedClass() = default;

		virtual shared_ptr<ISCW_UBlueprintGeneratedClass> ToBlueprintGeneratedClassPtr() const = 0;

		virtual shared_ptr<const ISCW_UBlueprintGeneratedClass> ToBlueprintGeneratedClassConstPtr() const = 0;

		virtual vector<shared_ptr<ISCW_UActorComponent>> GetComponentTemplates() const = 0;

		virtual void PrepareToConformSparseClassData(shared_ptr<ISCW_UScriptStruct> ScriptStruct) const = 0;

		virtual shared_ptr<ISCW_USimpleConstructionScript> SimpleConstructionScript() const = 0;
	};

	using ISCW_UBlueprintGeneratedClassConstPtr = shared_ptr<const ISCW_UBlueprintGeneratedClass>;
	using ISCW_UBlueprintGeneratedClassPtr = shared_ptr<ISCW_UBlueprintGeneratedClass>;
}// namespace Sourcify