#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "SoftRemoteContentCacheObjectPtr.h"
#include "UObject/SoftObjectPtr.h"
#include "TimerFlagViewData.h"
#include "StoreCollectionViewData.generated.h"

class UFileMediaSource;
class UStoreCustomizationItemViewData;

UCLASS(Blueprintable)
class DBDUIVIEWINTERFACES_API UStoreCollectionViewData : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FString CollectionId;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FString DisplayTitle;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FString DisplaySubtitle;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FDateTime LimitedAvailabilityStartDate;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool VisibleBeforeStartDate;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FDateTime LimitedAvailabilityEndDate;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool VisibleAfterEndDate;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	int32 SortOrder;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FSoftRemoteContentCacheObjectPtr HeroImage;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	TSoftObjectPtr<UFileMediaSource> HeroVideo;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	TArray<FSoftRemoteContentCacheObjectPtr> AdditionalImages;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	bool IsNew;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	TArray<UStoreCustomizationItemViewData*> Items;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	int32 AvailableItemsCount;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	int32 OwnedItemsCount;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FTimerFlagViewData DiscountTimerViewData;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FTimerFlagViewData AvailabilityTimerViewData;

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

	UFUNCTION(BlueprintPure)
	bool IsCollectionHidden() const;

	UFUNCTION(BlueprintPure)
	bool IsCollectionActive() const;

	UFUNCTION(BlueprintPure)
	bool HasHeroVideo() const;

	UFUNCTION(BlueprintPure)
	bool HasHeroImage() const;

public:
	UStoreCollectionViewData();
};

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