#pragma once

#include "CoreMinimal.h"
#include "AuricCellsViewInterface.h"
#include "CoreBaseUserWidget.h"
#include "AuricCellsBackActionDelegate.h"
#include "AuricCellsBuyActionDelegate.h"
#include "AuricCellsSupportACreatorActionDelegate.h"
#include "CoreAuricCellsWidget.generated.h"

class UCoreInputSwitcherWidget;
class UCoreAuricCellsContainerWidget;
class UDBDTextBlock;
class UPanelWidget;
class UAudioEventWrapper;

UCLASS(Blueprintable, EditInlineNew)
class DBDUIVIEWSCORE_API UCoreAuricCellsWidget : public UCoreBaseUserWidget, public IAuricCellsViewInterface
{
	GENERATED_BODY()

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintCallable)
	FAuricCellsBackActionDelegate _backActionDelegate;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintCallable)
	FAuricCellsBuyActionDelegate _buyActionDelegate;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintCallable)
	FAuricCellsSupportACreatorActionDelegate _supportACreatorActionDelegate;

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

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreAuricCellsContainerWidget* Container;

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

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

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

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UPanelWidget* SupportACreatorSection;

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

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

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

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

protected:
	UFUNCTION(BlueprintCallable)
	void OnSupportACreatorInputSwitcherClicked();

	UFUNCTION(BlueprintCallable)
	void OnBuyAction(FName bundleId);

public:
	UCoreAuricCellsWidget();
};

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