package messages

import (
	"crypto/sha256"
	"encoding/base64"
	"fmt"
)

const (
	prefixLength = 4
	IDSize       = prefixLength + sha256.Size
)

var (
	prefix = []byte("sha-") // 4 bytes
)

// HashID generates a sha256 hash from the peerID and returns the hash and the human-readable string
func HashID(peerID string) ([]byte, string) {
	idHash := sha256.Sum256([]byte(peerID))
	idHashString := string(prefix) + base64.StdEncoding.EncodeToString(idHash[:])
	var prefixedHash []byte
	prefixedHash = append(prefixedHash, prefix...)
	prefixedHash = append(prefixedHash, idHash[:]...)
	return prefixedHash, idHashString
}

// HashIDToString converts a hash to a human-readable string
func HashIDToString(idHash []byte) string {
	return fmt.Sprintf("%s%s", idHash[:prefixLength], base64.StdEncoding.EncodeToString(idHash[prefixLength:]))
}