package tool

import "iter"

func Bulk[T any](slice []T, size int) iter.Seq2[int, []T] {
	if size <= 0 {
		panic("bulk size must be positive")
	}

	s := make([]T, 0, size)
	idx := 0
	return func(yield func(int, []T) bool) {
		for i := range slice {
			s = append(s, (slice)[i])
			if len(s) >= size {

				// send to handle
				ok := yield(idx, s)
				if !ok {
					return
				}

				idx++
				s = make([]T, 0, size)
			}
		}

		if len(s) > 0 {
			yield(idx, s)
		}
	}
}