// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "AgrarianEditorAutomationLibrary.generated.h"

class AAgrarianGameCharacter;
class AAgrarianResourceNode;
class AAgrarianWildlifeBase;
class UAgrarianRecipeDataAsset;

/**
 * Editor automation helpers used by Python setup scripts.
 */
UCLASS()
class AGRARIANGAME_API UAgrarianEditorAutomationLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, Category = "Agrarian|Editor Automation")
	static AActor* SpawnActorInEditorWorld(TSubclassOf<AActor> ActorClass, const FVector& Location, const FRotator& Rotation, const FString& ActorLabel);

	UFUNCTION(BlueprintCallable, Category = "Agrarian|Editor Automation")
	static FString RunPlayableLoopSmokeTest(TSubclassOf<AAgrarianGameCharacter> CharacterClass, AAgrarianResourceNode* ResourceNode, UAgrarianRecipeDataAsset* ShelterRecipe, TSubclassOf<AActor> ShelterClass);

	UFUNCTION(BlueprintCallable, Category = "Agrarian|Editor Automation")
	static FString RunNaturalShelterLoopSmokeTest(
		TSubclassOf<AAgrarianGameCharacter> CharacterClass,
		AAgrarianResourceNode* WoodNode,
		AAgrarianResourceNode* FiberNode,
		AAgrarianWildlifeBase* Wildlife,
		UAgrarianRecipeDataAsset* FrameRecipe,
		UAgrarianRecipeDataAsset* WallPanelRecipe,
		UAgrarianRecipeDataAsset* RoofPanelRecipe,
		UAgrarianRecipeDataAsset* ShelterRecipe,
		TSubclassOf<AActor> ShelterClass);

	UFUNCTION(BlueprintCallable, Category = "Agrarian|Editor Automation")
	static FString RunPersistenceSubsystemSmokeTest(TSubclassOf<AActor> ShelterClass, const FString& SlotName);

	UFUNCTION(BlueprintCallable, Category = "Agrarian|Editor Automation")
	static FString ImportLandscapeHeightmapIntoEditorWorld(
		const FString& HeightmapFilename,
		int32 Width,
		int32 Height,
		float XScaleCm,
		float YScaleCm,
		float ZScaleCm,
		const FString& ActorLabel);
};
