#pragma once

#include "SharedDef.generated.h"


UENUM(BlueprintType)
enum class ERobotsCategories : uint8
{
	Wheeled 				UMETA(DisplayName = "Wheeled Robots"),
	FourLegged 				UMETA(DisplayName = "Four-Legged Robots"),
	TwoLegged 				UMETA(DisplayName = "Two-Legged Robots"),
	Stationary 				UMETA(DisplayName = "Stationary Robots"),
	IndoorFlying 			UMETA(DisplayName = "Indoor Flying Robots"),
	SwimmingUnderwater 		UMETA(DisplayName = "Swimming/Underwater Robots"),
	CrawlingModular			UMETA(DisplayName = "Crawling/Modular Robots"),
	Arm						UMETA(DisplayName = "Arm-Robots"),
	OutdoorFlying			UMETA(DisplayName = "Outdoor Flying Robots")
};

UENUM(BlueprintType)
enum class ERobotsName : uint8
{
	None 					UMETA(DisplayName = "None"),
	Luck_e 					UMETA(DisplayName = "Luck-e"),
	Stretch 				UMETA(DisplayName = "Stretch"),
	LuckyDrone 				UMETA(DisplayName = "Lucky Drone"),
	DJIDrone 				UMETA(DisplayName = "DJI Drone"),
	ArmLucky 				UMETA(DisplayName = "Arm Lucky"),
	UnitreeG1 				UMETA(DisplayName = "Unitree G1"),
	StretchRobotV1 			UMETA(DisplayName = "Stretch Robot V1"),
	PandaArmRobot 			UMETA(DisplayName = "Panda Arm Robot"),
	PuralinkRobot 			UMETA(DisplayName = "Puralink Robot"),
	UnitreeGo2 				UMETA(DisplayName = "Unitree Go 2"),
	RevoluteRobot 			UMETA(DisplayName = "Revolute Robot"),
	BostonSpotRobot 		UMETA(DisplayName = "Boston Spot Robot")
};

UENUM(BlueprintType)
enum class ELevelType : uint8
{
	Home 					UMETA(DisplayName = "Home"),
	Office 					UMETA(DisplayName = "Office"),
	Street 					UMETA(DisplayName = "Street"),
	TestLevel 				UMETA(DisplayName = "TestLevel")
};

UENUM(BlueprintType)
enum class ELevelEnum : uint8
{
	None 					UMETA(DisplayName = "None"),
	TestLevel 				UMETA(DisplayName = "Test Level"),
	Loft 					UMETA(DisplayName = "Loft"),
	Rome 					UMETA(DisplayName = "Rome"),
	Paris 					UMETA(DisplayName = "Paris"),
	Marseille 				UMETA(DisplayName = "Marseille"),
	Istanbul 				UMETA(DisplayName = "Istanbul"),
	Office 					UMETA(DisplayName = "Office"),
	BasicForest 			UMETA(DisplayName = "Basic Forest"),
	NaturalForest 			UMETA(DisplayName = "Natural Forest"),
	KitchenForArmRobot 		UMETA(DisplayName = "Kitchen for Arm Robot"),
	PipeFabric 				UMETA(DisplayName = "Pipe Fabric")
};

UENUM(BlueprintType)
enum class EQualityEnum : uint8
{
	Epic 					UMETA(DisplayName = "Epic"),
	High 					UMETA(DisplayName = "High"),
	Middle 					UMETA(DisplayName = "Middle"),
	Low	 					UMETA(DisplayName = "Low")
};

USTRUCT(BlueprintType)
struct FRobotData : public FTableRowBase
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ERobotsName Name;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSubclassOf<AActor> RobotClass;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FTransform Transform;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bActive;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UTexture2D* RobotImage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ERobotsCategories RobotType;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FText HelpText;
};

USTRUCT(BlueprintType)
struct FLevelData : public FTableRowBase
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int ID;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ELevelEnum LevelEnum;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ELevelType LevelType;


	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString LevelName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UTexture2D* LevelImage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bActive;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<ERobotsCategories> RobotTypeList;
};