#pragma once

#include "CoreMinimal.h"
#include "ZMMOCharSummary.generated.h"

/** Stats primarios do personagem (espelha `CharStats` em char.types.ts). */
USTRUCT(BlueprintType)
struct FZMMOCharStats
{
	GENERATED_BODY()

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Str = 1;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Agi = 1;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Vit = 1;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Int = 1;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Dex = 1;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Luk = 1;
};

/** Aparencia (espelha `CharAppearance` em char.types.ts). */
USTRUCT(BlueprintType)
struct FZMMOCharAppearance
{
	GENERATED_BODY()

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 Hair = 0;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 HairColor = 0;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 SkinColor = 0;
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char") int32 BodyType = 0;
};

/**
 * Resumo de personagem recebido do CharServer via S_CHAR_LIST.
 * Espelha `CharSummary` em `Server/ZeusCharServer/src/types/char.types.ts`.
 */
USTRUCT(BlueprintType)
struct FZMMOCharSummary
{
	GENERATED_BODY()

	/** charId — BIGINT UNSIGNED no banco; armazenado como FString aqui pra preservar 64 bits. */
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FString CharId;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FString WorldId;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 Slot = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FString Name;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 ClassId = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 BaseLevel = 1;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 BaseExp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 JobLevel = 1;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 JobExp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FZMMOCharStats Stats;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 Hp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 MaxHp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 Sp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 MaxSp = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 Money = 0;

	/** ID do mapa (uint16). Resolvido via DT_Maps no cliente. 0 = invalido. */
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int32 MapId = 0;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FVector Position = FVector::ZeroVector;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	float YawDeg = 0.f;

	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	FZMMOCharAppearance Appearance;

	/** Epoch ms em que o delete vai efetivar. 0 = nao agendado. */
	UPROPERTY(BlueprintReadOnly, Category = "Zeus|Char")
	int64 DeleteScheduledAtMs = 0;
};
