package address

import (
	"encoding/hex"
	"fmt"
	"strconv"
	"strings"

	"golang.org/x/crypto/sha3"
)

func SarafuAddress(address string) (string, error) {
	l := len(address)

	if l < 40 || l > 42 {
		return "", fmt.Errorf("%s is not a valid eth address", address)
	}

	if len(address) == 42 {
		return strings.ToLower(address)[2:], nil
	}

	return strings.ToLower(address), nil
}

func Checksum(address string) string {
	address = strings.ToLower(address)
	address = strings.Replace(address, "0x", "", 1)

	sha := sha3.NewLegacyKeccak256()
	sha.Write([]byte(address))
	hash := sha.Sum(nil)
	hashstr := hex.EncodeToString(hash)
	result := []string{"0x"}
	for i, v := range address {
		res, _ := strconv.ParseInt(string(hashstr[i]), 16, 64)
		if res > 7 {
			result = append(result, strings.ToUpper(string(v)))
			continue
		}
		result = append(result, string(v))
	}

	return strings.Join(result, "")
}