#pragma once

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

UCLASS()
class UNREALHYPERTWIST_API UHyperTwistSolverLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static bool IsSolverInitialized();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static bool InitializeSolver();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static TArray<FString> SolveClassicState(
		const FString& FaceletString,
		int32 TimeLimitMs = 1000,
		int32 MaxLength = 25,
		int32 NumSolutions = 1
	);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static FString GetMoveName(int32 MoveIndex);

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static int32 GetMoveCount();

	UFUNCTION(BlueprintCallable, Category = "HyperTwist|Solver")
	static bool VerifyFaceletString(const FString& FaceletString);
};
