package api_v2

import "fmt"

const TEST_DATA_STEP = 10

func GenerateTestData(
	keys, values0, values1 [][]byte,
	rawPrefix []byte, keyPrefix string,
	keysPerThread, threads int64,
	padding []byte,
	idx, limit, offset int64,
) ([][]byte, [][]byte, [][]byte) {
	if limit > keysPerThread {
		limit = keysPerThread
	}

	if cap(keys) == 0 {
		keys = make([][]byte, 0, limit)
	}
	if cap(values0) == 0 {
		values0 = make([][]byte, 0, limit)
	}
	if cap(values1) == 0 {
		values1 = make([][]byte, 0, limit)
	}

	keys = keys[:0]
	values0 = values0[:0]
	values1 = values1[:0]

	start := (idx*keysPerThread + offset) * TEST_DATA_STEP
	end := (idx*keysPerThread + offset + limit) * TEST_DATA_STEP
	threadEnd := (idx + 1) * keysPerThread * TEST_DATA_STEP
	if end > threadEnd {
		end = threadEnd
	}

	for k := start; k < end; k += TEST_DATA_STEP {
		var key []byte
		key = append(key, rawPrefix...)
		key = append(key, []byte(keyPrefix)...)
		key = append(key, []byte(fmt.Sprintf("%016d", k))...)
		keys = append(keys, key)

		values0 = append(values0, append([]byte(fmt.Sprintf("%v_", k)), padding...))
		values1 = append(values1, append([]byte(fmt.Sprintf("%v_", k+1)), padding...))
	}
	return keys, values0, values1
}
