#pragma once

#include "CoreMinimal.h"
#include "InboxViewInterface.h"
#include "CoreBaseUserWidget.h"
#include "CoreInboxWidget.generated.h"

class UCoreInputSwitcherWidget;
class UCoreKeyListenerInputPromptWidget;
class UCoreTabContainerWidget;
class UWidgetSwitcher;
class UCoreInboxListWidget;
class UCoreInboxHeaderWidget;
class UCoreInboxBodyWidget;
class UCoreInboxKeyArtWidget;
class UCoreInfoMessageWidget;
class UWidget;
class UDBDTextBlock;
class UAudioEventWrapper;
class UCoreSelectableButtonWidget;

UCLASS(Blueprintable, EditInlineNew)
class DBDUIVIEWSCORE_API UCoreInboxWidget : public UCoreBaseUserWidget, public IInboxViewInterface
{
	GENERATED_BODY()

protected:
	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* BackInputSwitcher;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreKeyListenerInputPromptWidget* ScrollInputPrompt;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreTabContainerWidget* TabsContainer;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UWidgetSwitcher* TabContentSwitcher;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInboxListWidget* NewsList;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInboxListWidget* MessagesList;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInboxHeaderWidget* Header;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* NewsGeneralButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* MessagesGeneralButton;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInboxBodyWidget* Body;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInboxKeyArtWidget* KeyArt;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* ClaimInputSwitcher;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* InternalLinkInputSwitcher;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInputSwitcherWidget* ExternalLinkInputSwitcher;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreInfoMessageWidget* InfoMessageWidget;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UWidget* LoadingContainer;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UDBDTextBlock* LoadingTB;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UAudioEventWrapper* _openSfx;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UAudioEventWrapper* _closeSfx;

private:
	UFUNCTION(BlueprintCallable)
	void OnTabSelected(UCoreSelectableButtonWidget* selectedButton);

	UFUNCTION(BlueprintCallable)
	void OnRedirectClicked();

	UFUNCTION(BlueprintCallable)
	void OnNewsGeneralButtonClicked();

	UFUNCTION(BlueprintCallable)
	void OnMessagesGeneralButtonClicked();

	UFUNCTION(BlueprintCallable)
	void OnItemClicked(const FName& itemId);

	UFUNCTION(BlueprintCallable)
	void OnClaimClicked();

	UFUNCTION(BlueprintCallable)
	void OnBackButtonClicked();

public:
	UCoreInboxWidget();
};

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