#pragma once

#include "CoreMinimal.h"
#include "DBDExcludableTableRow.h"
#include "ESpecialEventMainMenuType.h"
#include "ECurrencyType.h"
#include "SpecialEventCommunityChallengeData.h"
#include "SpecialEventObjectiveData.h"
#include "SpecialBehaviourSpawnableComponent.h"
#include "ESpecialEventGameMode.h"
#include "SpecialEventEntryPopupData.h"
#include "ESpecialEventDependency.h"
#include "SpecialEventBloodwebData.h"
#include "SpecialEventOfferingSequenceData.h"
#include "SpecialEventSplashScreenData.h"
#include "SpecialEventUiTakeoverData.h"
#include "SpecialEventData.generated.h"

class UCommentatorAudioData;
class UDataTable;

USTRUCT(BlueprintType)
struct FSpecialEventData : public FDBDExcludableTableRow
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName EventId;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ESpecialEventMainMenuType MainMenuType;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ECurrencyType CurrencyType;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FText EventName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString EventBannerLabel;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString EventThemeLabel;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool IsTrackedOnline;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseSpecialEventLoadingScreen;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseSpecialEventLoadingScreenInOnlineQueue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseLoadingScreenHintsFromBackend;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventCommunityChallengeData CommunityChallenge;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FSpecialEventObjectiveData> Objectives;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString LobbyName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString ShopName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FString> EventObjectivesLobbyNames;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FString> AdditionalLobbyNames;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName AudioStateSpecialEvent;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FSpecialBehaviourSpawnableComponent> SpawnableComponents;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ESpecialEventGameMode GameMode;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 EventPriority;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseEventEntryScreen;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventEntryPopupData EventEntryData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ESpecialEventDependency EventDependency;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseMarketDiscount;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventBloodwebData Bloodweb;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventOfferingSequenceData OfferingSequence;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventSplashScreenData SplashScreen;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FSpecialEventUiTakeoverData UiTakeoverData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UCommentatorAudioData* CommentatorAudioData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UDataTable* EffectCardsDB;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName MapShowcaseId;

public:
	DEADBYDAYLIGHT_API FSpecialEventData();
};

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