import { BadRequestException } from '@nestjs/common';

/**
 * Teto de linhas por página.
 *
 * Existe para o cliente não pedir a lista inteira de uma vez: bolão de empresa
 * chega a centenas de participantes, e `limit` sem teto transforma qualquer
 * tela em consulta pesada — inclusive por acidente.
 */
export const LIMITE_MAXIMO = 100;

/**
 * Valida `limit`/`offset` de uma listagem.
 *
 * `limit=0` **não** pode passar devolvendo lista vazia: a tela mostraria
 * "ninguém no bolão" / "ranking vazio" e quem lê acredita. Pedido inválido tem
 * que ser recusado com motivo; o que é apenas grande demais é limitado ao teto.
 */
export function paginacao(
  limit: number,
  offset: number,
): { limit: number; offset: number } {
  if (!Number.isInteger(limit) || limit < 1) {
    throw new BadRequestException('limit deve ser um inteiro maior que zero');
  }
  if (!Number.isInteger(offset) || offset < 0) {
    throw new BadRequestException('offset deve ser um inteiro maior ou igual a zero');
  }
  return { limit: Math.min(limit, LIMITE_MAXIMO), offset };
}
