package enx

/*
#cgo CFLAGS: -I../include/heavyHash
#cgo LDFLAGS: -L../lib/heavyHash -lheavyhash
#include "heavyhash.h"
*/
import "C"
import (
	"fmt"
	"strings"
	"unsafe"
)

func EnxHash(data []byte) string {
	// 初始化 CSHA3_256 结构体
	var sha3 C.CSHA3_256

	// 调用 C 语言的 Write 方法
	C.CSHA3_256_Write(&sha3, (*C.uchar)(unsafe.Pointer(&data[0])), C.size_t(len(data)))

	// 调用 C 语言的 Finalize 方法来生成哈希
	var hash [C.OUTPUT_SIZE]C.uchar
	C.CSHA3_256_Finalize(&sha3, &hash[0])

	// 使用 strings.Builder 来拼接字符串
	var builder strings.Builder
	for i := 0; i < C.OUTPUT_SIZE; i++ {
		// 以十六进制方式格式化每个字节
		builder.WriteString(fmt.Sprintf("%02x", hash[i]))
	}

	// 返回最终的哈希值
	return builder.String()
}