#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "AutomaticBreadcrumbs.h"
#include "Templates/SubclassOf.h"
#include "TagsPromotion.h"
#include "EnableBuildConfigurations.h"
#include "EnableBuildTargets.h"
#include "EnableBuildPlatforms.h"
#include "SentrySettings.generated.h"

class USentryBeforeSendHandler;

UCLASS(Blueprintable)
class SENTRY_API USentrySettings : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool InitAutomatically;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Dsn;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool Debug;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool EnableAutoCrashCapturing;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Environment;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float SampleRate;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool EnableAutoLogAttachment;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool AttachStacktrace;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool SendDefaultPii;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool AttachScreenshot;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 MaxBreadcrumbs;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FAutomaticBreadcrumbs AutomaticBreadcrumbs;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool EnableAutoSessionTracking;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 SessionTimeout;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool OverrideReleaseName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Release;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseProxy;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString ProxyUrl;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSubclassOf<USentryBeforeSendHandler> BeforeSendHandler;

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

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

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTagsPromotion TagsPromotion;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FEnableBuildConfigurations EnableBuildConfigurations;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FEnableBuildTargets EnableBuildTargets;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FEnableBuildPlatforms EnableBuildPlatforms;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool EnableForPromotedBuildsOnly;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UploadSymbolsAutomatically;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString ProjectName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString OrgName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString AuthToken;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool IncludeSources;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString CrashReporterUrl;

public:
	USentrySettings();
};

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