#pragma once

#include "CoreMinimal.h"
#include "UObject/SoftObjectPtr.h"
#include "ChallengeObjectiveViewData.h"
#include "ChallengeObjectiveProgressionViewData.h"
#include "RewardWrapperViewData.h"
#include "EChallengeType.h"
#include "UObject/NoExportTypes.h"
#include "EPlayerRole.h"
#include "ChallengeViewData.generated.h"

class UTexture2D;

USTRUCT(BlueprintType)
struct FChallengeViewData
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Id;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 ChallengeOrder;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString ChallengeTitle;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString ChallengeDescription;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UTexture2D> ChallengeIcon;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 LifetimeInDays;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TMap<FString, FChallengeObjectiveViewData> Objectives;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TMap<FString, FChallengeObjectiveProgressionViewData> Progression;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 RewardPoints;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRewardWrapperViewData RewardPointsProgressionData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FRewardWrapperViewData> Rewards;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	EChallengeType ChallengeType;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDateTime StartTime;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDateTime EndTime;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	EPlayerRole RoleType;

public:
	DBDUIVIEWINTERFACES_API FChallengeViewData();
};

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