import indiceCalculation from '../../src/utils/indiceCalculation'

describe('IndiceCalculation', () => {
  it('should calculate the indexes', () => {
    expect(indiceCalculation(20, 60, 1, 1, 3)).toStrictEqual({
      endIndex: 19,
      pages: [1, 2, 3],
      startIndex: 0,
    })
  })

  it('should calculate indexes for the second page', () => {
    expect(indiceCalculation(5, 12, 2, 1, 3)).toStrictEqual({
      startIndex: 5,
      endIndex: 9,
      pages: [1, 2, 3],
    })
  })

  it('should calculate indexes for the last page with fewer items', () => {
    expect(indiceCalculation(5, 12, 3, 1, 3)).toStrictEqual({
      startIndex: 10,
      endIndex: 11,
      pages: [1, 2, 3],
    })
  })

  it('should return a single page in the pages array', () => {
    expect(indiceCalculation(10, 3, 1, 1, 1)).toStrictEqual({
      startIndex: 0,
      endIndex: 2,
      pages: [1],
    })
  })

  it('should build the pages window when startPage and endPage differ', () => {
    expect(indiceCalculation(5, 50, 5, 3, 7)).toStrictEqual({
      startIndex: 20,
      endIndex: 24,
      pages: [3, 4, 5, 6, 7],
    })
  })

  it('should not exceed the last item index on the final page', () => {
    const result = indiceCalculation(5, 7, 2, 1, 2)

    expect(result.startIndex).toBe(5)
    expect(result.endIndex).toBe(6)
  })
})
