export type PaginationItem = number | "ellipsis"

/**
 * Returns page numbers to display. When totalPages > 5, shows first/last page,
 * neighbors of the current page, and ellipsis for gaps.
 */
export function getPaginationPages(
  currentPage: number,
  totalPages: number,
): PaginationItem[] {
  if (totalPages <= 0) return []

  if (totalPages <= 5) {
    return Array.from({ length: totalPages }, (_, i) => i + 1)
  }

  const pages = new Set<number>()
  pages.add(1)
  pages.add(totalPages)

  for (let page = currentPage - 1; page <= currentPage + 1; page++) {
    if (page >= 1 && page <= totalPages) {
      pages.add(page)
    }
  }

  const sorted = [...pages].sort((a, b) => a - b)
  const result: PaginationItem[] = []

  for (let i = 0; i < sorted.length; i++) {
    if (i > 0 && sorted[i] - sorted[i - 1] > 1) {
      result.push("ellipsis")
    }
    result.push(sorted[i])
  }

  return result
}
