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

#pragma once

#include "ISCW_UBlueprintGeneratedClass.h"
#include "SCW_UBlueprint.h"
#include "SCW_UClass.h"
#include "SCW_UField.h"
#include "SCW_UObject.h"

class UBlueprintGeneratedClass;

namespace Sourcify
{
	class SCW_UBlueprintGeneratedClass : public SCW_UClass, public virtual ISCW_UBlueprintGeneratedClass
	{
	public:
		SCW_UBlueprintGeneratedClass(UBlueprintGeneratedClass* InBlueprintGeneratedClass);

		ISCW_UBlueprintGeneratedClassPtr ToBlueprintGeneratedClassPtr() const override;

		ISCW_UBlueprintGeneratedClassConstPtr ToBlueprintGeneratedClassConstPtr() const override;

		vector<ISCW_UActorComponentPtr> GetComponentTemplates() const override;
		
		void PrepareToConformSparseClassData(ISCW_UScriptStructPtr ScriptStruct) const override;

		ISCW_USimpleConstructionScriptPtr SimpleConstructionScript() const override;
		
		UBlueprintGeneratedClass* ToUBlueprintGeneratedClass() const;

	protected:
		UBlueprintGeneratedClass* BlueprintGeneratedClass;
	};
} // namespace Sourcify