#pragma once

#include "CoreMinimal.h"
#include "StoreSubPresenter.h"
#include "StoreContentViewData.h"
#include "StoreRedirectionData.h"
#include "MysteryBoxStatus.h"
#include "StoreFeaturedSubPresenter.generated.h"

class UStoreCharacterItemViewData;

UCLASS(Blueprintable)
class DBDUIPRESENTERS_API UStoreFeaturedSubPresenter : public UStoreSubPresenter
{
	GENERATED_BODY()

private:
	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<FStoreContentViewData> _itemsViewData;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<UStoreCharacterItemViewData*> _charactersViewData;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<FStoreContentViewData> _featuredContent;

private:
	UFUNCTION()
	void RequestMoveToPage(const FStoreRedirectionData& storeRedirectionData, const uint32 contextUid);

	UFUNCTION(BlueprintCallable)
	void RequestMoveToCharactersPage(const FStoreRedirectionData& storeRedirectionData);

	UFUNCTION(BlueprintCallable)
	void RequestMoveFromFeaturedCustomizationItems(const FStoreRedirectionData& storeRedirectionData);

	UFUNCTION(BlueprintCallable)
	void RequestCrossPromoPopup(const FString& crossPromoId);

	UFUNCTION(BlueprintCallable)
	void OnMysteryBoxStatusLoaded(bool succeeded, const FString& campaign, const FMysteryBoxStatus& status);

	UFUNCTION(BlueprintCallable)
	void OnMysteryBoxClaimComplete(bool succeeded, const FString& campaign, const FMysteryBoxStatus& status);

	UFUNCTION(BlueprintCallable)
	void OnMysteryBoxClaimClicked();

	UFUNCTION(BlueprintCallable)
	void OnMysteryBoxClaimableStatusChanged(const FString& campaign, const FMysteryBoxStatus& status);

	UFUNCTION(BlueprintCallable)
	void OnFeaturedContentClicked(const FStoreContentViewData& storeContentViewData);

public:
	UFUNCTION(BlueprintCallable)
	void OnBackendStoreDataReceived(bool success);

public:
	UStoreFeaturedSubPresenter();
};

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