#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "HyperTwistClassicCubeOperatorSurface.generated.h"

UINTERFACE(BlueprintType)
class UNREALHYPERTWIST_API UHyperTwistClassicCubeOperatorSurface : public UInterface
{
	GENERATED_BODY()
};

class UNREALHYPERTWIST_API IHyperTwistClassicCubeOperatorSurface
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeFreshAttempt();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeHint();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeSubmitSolve();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeToggleFollowAlongMode();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeBeginVoiceCommandCapture();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeEndVoiceCommandCapture();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "HyperTwist|ClassicCube|Operator")
	void RequestClassicCubeCycleVoiceProfile();

	UFUNCTION(
		BlueprintCallable,
		BlueprintNativeEvent,
		Category = "HyperTwist|ClassicCube|Operator"
	)
	bool CanClassicCubeAcceptGameplayMoveInput() const;

	UFUNCTION(
		BlueprintCallable,
		BlueprintNativeEvent,
		Category = "HyperTwist|ClassicCube|Operator"
	)
	bool IsClassicCubeAnyActionButtonHovered() const;
};
