package cuckoo_test

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/binary"
	"fmt"
	"io"

	"git.maximhutz.com/tools/go-cuckoo"
)

func NewStringHash(seed uint64) cuckoo.Hash[string] {
	key := binary.LittleEndian.AppendUint64(nil, seed)
	hash := hmac.New(sha256.New, key)

	return func(key string) uint64 {
		hash.Reset()
		// This will never return an error, as part of the [hash.Hash] contract. We
		// can safely ignore it.
		(io.WriteString(hash, key))
		return binary.LittleEndian.Uint64(hash.Sum(nil))
	}
}

func ExampleHash_stringHash() {
	hash := NewStringHash(1)
	fmt.Printf("Digest 'Hello, world!': %x\n", hash("Hello, world!"))
	fmt.Printf("Digest 'Hello, world?': %x\n", hash("Hello, world?"))

	// Output:
	// Digest 'Hello, world!': dc6602d6edcdf549
	// Digest 'Hello, world?': 432c2ddc1ae9f14b
}
