import { concreteChunkId } from "@tsplus/stdlib/collections/Chunk/definition"
/**
* Splits this chunk into `n` equally sized chunks.
*
* @tsplus static Chunk.Aspects split
* @tsplus pipeable Chunk split
*/
export function split(n: number) {
return (self: Chunk): Chunk> => {
const length = concreteChunkId(self).length
const k = Math.floor(n)
const quotient = Math.floor(length / k)
const remainder = length % k
let chunks = Chunk.empty>()
let i = 0
let chunk = Chunk.empty()
self.forEach((a) => {
chunk = chunk.append(a)
if (
(i <= remainder && concreteChunkId(chunk).length > quotient) ||
(i > remainder && concreteChunkId(chunk).length >= quotient)
) {
chunks = chunks.append(chunk)
chunk = Chunk.empty()
}
i++
})
if (concreteChunkId(chunk).length > 0) {
chunks = chunks.append(chunk)
}
return chunks
}
}