package cql

import "unicode/utf8"

func formatClientCustomPayload(payload CustomPayload) map[string]string {
	if len(payload) == 0 {
		return nil
	}

	out := make(map[string]string, len(payload))
	for key, value := range payload {
		if len(value) == 0 {
			out[key] = ""
			continue
		}
		if utf8.Valid(value) {
			out[key] = string(value)
			continue
		}
		out[key] = "0x" + bytesToHex(value)
	}
	return out
}

func bytesToHex(data []byte) string {
	if len(data) == 0 {
		return ""
	}
	const hexdigits = "0123456789abcdef"
	buf := make([]byte, len(data)*2)
	for i, b := range data {
		buf[i*2] = hexdigits[b>>4]
		buf[i*2+1] = hexdigits[b&0x0f]
	}
	return string(buf)
}
