#pragma once

#include "CoreMinimal.h"

/**
 * Opcodes do CharServer (WebSocket) consumidos pelo cliente. Espelha
 * `Server/ZeusCharServer/src/protocol/CharOpcodes.ts` (faixa 2000-2099).
 * Mantido mínimo: só os opcodes que o front-end usa hoje (auth da Login).
 * Ampliar conforme as telas (lista/criação/seleção de personagem) chegarem.
 *
 * Wire: string = uint16 LE (len) + UTF-8; inteiros LE. O cabeçalho de 32B
 * é responsabilidade do UZeusCharServerSubsystem (Send/OnRawMessage operam
 * sobre o payload já sem header).
 */
namespace ZMMOCharOp
{
	// Autenticação — payload começa com uint8 method (ver ZMMOCharAuthMethod)
	constexpr int32 C_CHAR_AUTH_REQUEST = 2000;
	constexpr int32 S_CHAR_AUTH_OK      = 2001; // string(accountId)+string(user)+uint64(expiresMs)
	constexpr int32 S_CHAR_AUTH_REJECT  = 2002; // uint16(reason)
}

/**
 * Método de autenticação enviado como uint8 prefix no payload do
 * C_CHAR_AUTH_REQUEST. TOKEN mantém o fluxo Stub/JWT (handoff de outro
 * serviço); PASSWORD chama AccountService.login direto no CharServer.
 * Espelha `CharAuthMethod` em CharOpcodes.ts.
 */
namespace ZMMOCharAuthMethod
{
	constexpr uint8 TOKEN    = 0;
	constexpr uint8 PASSWORD = 1;
}

/** Espelha `CharRejectReason` em CharOpcodes.ts (subset usado no front-end). */
namespace ZMMOCharRejectReason
{
	constexpr uint16 Unknown                 = 0;
	constexpr uint16 InvalidToken            = 1;
	constexpr uint16 AccountBanned           = 2;
	constexpr uint16 AlreadyOnline           = 3;
	constexpr uint16 InvalidCredentials      = 4;
	constexpr uint16 AccountLocked           = 5;
	constexpr uint16 AccountSuspended        = 6;
	constexpr uint16 CredentialsAuthDisabled = 7;
}
