#pragma once

#include "CoreMinimal.h"
#include "ReportPlayerPopupViewInterface.h"
#include "CoreGenericPopupWidget.h"
#include "ConfirmReportPlayerDelegate.h"
#include "KeyboardButtonClickedDelegate.h"
#include "CoreReportPlayerPopupWidget.generated.h"

class UCoreReportCategoryButtonWidget;
class UDBDRichTextBlock;
class UDBDMultiLineEditableTextBox;
class UDBDButton;
class UCoreButtonWidget;

UCLASS(Blueprintable, EditInlineNew)
class DBDUIVIEWSCORE_API UCoreReportPlayerPopupWidget : public UCoreGenericPopupWidget, public IReportPlayerPopupViewInterface
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreReportCategoryButtonWidget* PropsButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreReportCategoryButtonWidget* HarassmentButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreReportCategoryButtonWidget* GriefingButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreReportCategoryButtonWidget* ExploitsButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreReportCategoryButtonWidget* UnsportsmanlikeButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UDBDRichTextBlock* CategoryDescriptionRTB;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UDBDMultiLineEditableTextBox* CommentInputEditableTB;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UDBDButton* KeyboardButton;

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FConfirmReportPlayerDelegate _confirmReportPlayer;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FKeyboardButtonClickedDelegate _onKeyboardButtonClicked;

protected:
	UFUNCTION(BlueprintCallable)
	void OnKeyboardButtonClicked();

	UFUNCTION(BlueprintCallable)
	void OnConfirmReportPlayer();

	UFUNCTION(BlueprintCallable)
	void OnCategoryButtonUnhovered(UCoreButtonWidget* buttonTarget);

	UFUNCTION(BlueprintCallable)
	void OnCategoryButtonHovered(UCoreButtonWidget* buttonTarget);

	UFUNCTION(BlueprintCallable)
	void OnCategoryButtonClicked(UCoreButtonWidget* buttonTarget);

public:
	UCoreReportPlayerPopupWidget();
};

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