// Copyright (c) 2025 Danielel. All rights reserved.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "ShaderPipelineCache.h"

#include "ShaderPipeline.generated.h"

/**
 * 
 */
UCLASS()
class PSOFUNCTIONS_API UShaderPipeline : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
public:

	

	UFUNCTION(BlueprintCallable, Category = "PSO precompile", meta = (ToolTip = "Sets the precompilation batching mode to Fast"))
	static void SetBatchModeFast();

	UFUNCTION(BlueprintCallable, Category = "PSO precompile", meta = (ToolTip = "Sets the precompilation batching mode to Background"))
	static void SetBatchModeBackground();

	UFUNCTION(BlueprintCallable, Category = "PSO precompile", meta = (ToolTip = "Sets the precompilation batching mode to Precompile"))
	static void SetBatchModePrecompile();

	/** Pauses precompilation batching. */
	UFUNCTION(BlueprintCallable, Category = "PSO precompile", meta = (ToolTip = "Pauses precompilation batching"))
	static void PauseBatching();

	/** Resumes precompilation batching. */
	UFUNCTION(BlueprintCallable, Category = "PSO precompile", meta = (ToolTip = "Resumes precompilation batching"))
	static void ResumeBatching();

	/** true if pipeline cache(s) are precompiling. */
	UFUNCTION(BlueprintCallable, Category = "PSO precompile", BlueprintPure, meta = (ToolTip = "True if pipeline cache(s) are precompiling"))
	static bool IsPrecompiling();

	/** Returns the number of pipelines waiting for precompilation of the current PSOFC task.
		if there are multiple PSOFCs pending this will return a minimum value of 1. It may increase as subsequent caches are processed.*/
	UFUNCTION(BlueprintCallable, Category = "PSO precompile", BlueprintPure, meta = (ToolTip = "Returns the number of pipelines waiting for precompilation of the current PSOFC task. If there are multiple PSOFCs pending this will return a minimum value of 1. It may increase as subsequent caches are processed."))
	static int NumPrecompilesRemaining();

	UFUNCTION(BlueprintCallable, Category = "PSO precompile", BlueprintPure, meta = (ToolTip = "Returns if the precompilation batching is paused"))
	static bool IsBatchingPaused();
};
