#pragma once

#include "CoreMinimal.h"
#include "GameFramework/SaveGame.h"
#include "ZMMOLoginSaveGame.generated.h"

/**
 * Cache local da tela de Login. Persiste APENAS o nome do usuário (texto
 * plano — risco zero, é só rótulo) e o estado da checkbox "Lembrar Acesso".
 *
 * NÃO persistir senha aqui (CWE-256). Quando o auth real (HTTP/JWT) entrar,
 * adicionar `FString EncryptedRefreshToken` cifrado via DPAPI
 * (CryptProtectData no Windows / equivalente em outras plataformas) — o token
 * é opaco e revogável, padrão dominante em jogos comerciais
 * (Battle.net/Riot/Epic). Senha em si nunca toca o disco do cliente.
 *
 * Arquivo: [Project]/Saved/SaveGames/LoginCache_0.sav (binary blob das
 * UPROPERTY não-Transient via UE serializer).
 */
UCLASS()
class ZMMO_API UZMMOLoginSaveGame : public USaveGame
{
	GENERATED_BODY()

public:
	UPROPERTY()
	FString SavedUsername;

	UPROPERTY()
	bool bRememberAccess = false;

	/** Slot do arquivo .sav (sem extensão). */
	static const FString SlotName;

	/** Index de usuário do SO — 0 para single-player local. */
	static constexpr int32 UserIndex = 0;
};
