package utils

import (
	"crypto/md5"
	"fmt"
	"github.com/turbot/steampipe/sperr"
	"strconv"
)

func Base36Hash(input string, length int) (string, error) {
	// Get a hash of it.
	// TODO - should this be sha1 or something else instead?
	h := md5.New()
	_, err := h.Write([]byte(input))
	if err != nil {
		return "", sperr.New("Unable to create hash.")
	}
	// Get hex of the hash
	bs := fmt.Sprintf("%x", h.Sum(nil))

	// Convert the first 16 chars of the hash from hex to base 36
	u1Hex := bs[0:16]
	u1, err := strconv.ParseUint(u1Hex, 16, 64)
	if err != nil {
		return "", sperr.New("Unable to create hash.")
	}
	u1Base36 := strconv.FormatUint(u1, 36)

	// Either take the last {length} chars, or pad the result if needed
	if len(u1Base36) > length {
		return u1Base36[len(u1Base36)-length:], nil
	} else {
		return fmt.Sprintf("%0*s", length, u1Base36), nil
	}
}
