/**
 * Generates page numbers for pagination with ellipsis.
 *
 * Examples:
 * - Small dataset (≤5 pages): [1, 2, 3, 4, 5]
 * - Near beginning:           [1, 2, 3, 4, '...', 10]
 * - In middle:                [1, '...', 4, 5, 6, '...', 10]
 * - Near end:                 [1, '...', 7, 8, 9, 10]
 */
export function getPageNumbers(
  currentPage: number,
  totalPages: number
): (number | '...')[] {
  const maxVisiblePages = 5
  const range: (number | '...')[] = []

  if (totalPages <= maxVisiblePages) {
    for (let i = 1; i <= totalPages; i++) range.push(i)
    return range
  }

  range.push(1)

  if (currentPage <= 3) {
    for (let i = 2; i <= 4; i++) range.push(i)
    range.push('...', totalPages)
  } else if (currentPage >= totalPages - 2) {
    range.push('...')
    for (let i = totalPages - 3; i <= totalPages; i++) range.push(i)
  } else {
    range.push('...')
    for (let i = currentPage - 1; i <= currentPage + 1; i++) range.push(i)
    range.push('...', totalPages)
  }

  return range
}
