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

#pragma once

#include "ISCW_UBlueprint.h"
#include "ISCW_UInheritableComponentHandler.h"
#include "ISCW_USimpleConstructionScript.h"
#include "SCW_UObject.h"

class ISCW_UBlueprintGeneratedClass;
class UBlueprint;

namespace Sourcify
{
	class SCW_UBlueprint : public SCW_UObject, public virtual ISCW_UBlueprint
	{
	public:
		SCW_UBlueprint(UBlueprint* InBlueprint);

		void DeleteComponentTemplates() const override;
		
		void DeleteNewVariables() const override;
			
		ISCW_UBlueprintGeneratedClassPtr GeneratedClass() const override;

		void GetAllGraphs(vector<ISCW_UEdGraphPtr>& OutGraphs) const override;

		SCW_EBlueprintType GetBlueprintType() const override;

		wstring GetBlueprintNamespace() const override;

		vector<ISCW_UActorComponentPtr> GetComponentTemplates() const override;

		bool GetDeprecate() const override;

		bool GetGenerateConstClass() const override;
		
		bool GetGenerateAbstractClass() const override;
		
		vector<wstring> GetHideCategories() const override;
		
		vector<ISCW_UEdGraphPtr> GetEventGraphs() const override;
			
		vector<ISCW_UEdGraphPtr> GetFunctionGraphs() const override;

		vector<ISCW_FBPInterfaceDescriptionPtr> GetImplementedInterfaces() const override;

		ISCW_UInheritableComponentHandlerPtr GetInheritableComponentHandler(bool bCreateIfNecessary) const override;
		
		ISCW_UClassPtr GetParentClass() const override;

		SCW_EBlueprintStatus GetStatus() const override;

		vector<ISCW_FBPVariableDescriptionPtr> NewVariables() const override;

		ISCW_UBlueprintPtr ToUBlueprintPtr() override;

		ISCW_UBlueprintConstPtr ToUBlueprintPtr() const override;

		UBlueprint* ToUBlueprintRawPtr() const;

		vector<ISCW_UEdGraphPtr> GetUbergraphPages() const override;

		void SetSimpleConstructionScript(shared_ptr<class ISCW_USimpleConstructionScript> SCS) const override;

		ISCW_USimpleConstructionScriptPtr SimpleConstructionScript() const override;

		void SetParentClass(ISCW_UClassPtr Parent) const override;

	protected:
		UBlueprint* Blueprint;
	};
} // namespace Sourcify