#ifndef __VEREIGN_GRPC_ERROR_CODES_HH
#define __VEREIGN_GRPC_ERROR_CODES_HH

#include <cstdint>
#include <string>

namespace vereign::grpc {

static constexpr const char* ClientErrorStatus = "Vereign Client Library Error";

/**
 * Error codes returned into the gRPC API response `code` field on various failures.
 *
 * These are errors that happen inside the Vereign Client Library.
 * The errors that happen inside the Vereign Restful API are in the standard HTTP status code range
 * below 600.
 */
enum class ErrorCode : uint64_t {
  ClientError                 = 1000,
  UnexpectedError             = 1001,
  DeviceNotRegistered         = 1002,
  InvalidPinCode              = 1003,
  InvalidIdentity             = 1004
};

/**
 * Convert the error code to string.
 *
 * @param ec The error code.
 * @returns the error code integer as string.
 */
inline auto ErrorCodeAsString(ErrorCode ec) -> std::string {
  return std::to_string(uint64_t(ec));
}

}

#endif // __VEREIGN_GRPC_ERROR_CODES_HH