import { IndiceCalculationResult } from '../types'
import { normalizePageSize } from './normalize'

const buildPageRange = (startPage: number, endPage: number): number[] => {
  if (endPage < startPage) {
    return []
  }

  const pages: number[] = []
  pages.length = endPage - startPage + 1

  for (let index = 0; index < pages.length; index += 1) {
    pages[index] = startPage + index
  }

  return pages
}

const indiceCalculation = (
  pageSize: number,
  allItems: number,
  currentPage: number,
  startPage: number,
  endPage: number
): IndiceCalculationResult => {
  const safePageSize = normalizePageSize(pageSize)
  const startIndex = (currentPage - 1) * safePageSize
  const endIndex =
    allItems <= 0 ? -1 : Math.min(startIndex + safePageSize - 1, allItems - 1)

  return {
    pages: buildPageRange(startPage, endPage),
    startIndex,
    endIndex,
  }
}

export default indiceCalculation
