package utils

// PaginateSlice Generic pagination function for slices of any type
func PaginateSlice[T any](slice []T, pageSize int, page int) []T {
	// Calculate start and end indexes
	start := (page - 1) * pageSize
	end := start + pageSize

	// If start index exceed slice length, return empty slice.
	if start > len(slice) {
		return []T{}
	}
	// Ensure that end index does not exceed slice length
	if end > len(slice) {
		end = len(slice)
	}

	// Extract slice of original slice based on calculated indexes
	paginatedSlice := slice[start:end]
	return paginatedSlice
}
