#pragma once

#include "CoreMinimal.h"
#include "DisplayStandViewInterface.h"
#include "CoreBaseUserWidget.h"
#include "DisplayStandRotatedDelegate.h"
#include "UObject/NoExportTypes.h"
#include "CoreDisplayStandWidget.generated.h"

class UDragZone;
class UCoreKeyListenerInputPromptWidget;

UCLASS(Blueprintable, EditInlineNew)
class DBDUIVIEWSCORE_API UCoreDisplayStandWidget : public UCoreBaseUserWidget, public IDisplayStandViewInterface
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDisplayStandRotatedDelegate _onDisplayStandRotated;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(BindWidgetOptional))
	UDragZone* DragZone;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _useControllerRotation;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, NoClear)
	float _rotationSpeed;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool _showDisplayPrompt;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, NoClear)
	FText _displayPromptText;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, NoClear, meta=(BindWidgetOptional))
	UCoreKeyListenerInputPromptWidget* _displayPrompt;

public:
	UFUNCTION(BlueprintCallable)
	void UpdateDisplayPrompt();

	UFUNCTION(BlueprintCallable)
	void SetUseControllerRotation(const bool useControllerRotation);

	UFUNCTION(BlueprintCallable)
	void SetDisplayPromptVisibility(const bool isVisible);

	UFUNCTION(BlueprintCallable)
	void SetDisplayPromptText(const FText& displayPromptText);

	UFUNCTION(BlueprintCallable)
	void SetDisplayPrompt(UCoreKeyListenerInputPromptWidget* displayPrompt);

protected:
	UFUNCTION(BlueprintCallable)
	void OnDrag(FVector2D cursorDelta);

public:
	UFUNCTION(BlueprintPure)
	bool GetUseControllerRotation() const;

public:
	UCoreDisplayStandWidget();
};

FORCEINLINE uint32 GetTypeHash(const UCoreDisplayStandWidget) { return 0; }
