package base58

import (
	"encoding/hex"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestCheckEncodeDecode(t *testing.T) {
	var b58CsumEncoded = "KxhEDBQyyEFymvfJD96q8stMbJMbZUb6D1PmXqBWZDU2WvbvVs9o"
	var b58CsumDecodedHex = "802bfe58ab6d9fd575bdc3a624e4825dd2b375d64ac033fbc46ea79dbab4f69a3e01"

	b58CsumDecoded, _ := hex.DecodeString(b58CsumDecodedHex)
	encoded := CheckEncode(b58CsumDecoded)
	decoded, err := CheckDecode(b58CsumEncoded)
	assert.Nil(t, err)
	assert.Equal(t, encoded, b58CsumEncoded)
	assert.Equal(t, decoded, b58CsumDecoded)
}

func TestCheckDecodeFailures(t *testing.T) {
	badbase58 := "BASE%*"
	_, err := CheckDecode(badbase58)
	assert.NotNil(t, err)
	shortbase58 := "THqY"
	_, err = CheckDecode(shortbase58)
	assert.NotNil(t, err)
	badcsum := "KxhEDBQyyEFymvfJD96q8stMbJMbZUb6D1PmXqBWZDU2WvbvVs9A"
	_, err = CheckDecode(badcsum)
	assert.NotNil(t, err)
}

func TestBase58LeadingZeroes(t *testing.T) {
	buf := []byte{0, 0, 0, 1}
	b58 := CheckEncode(buf)
	dec, err := CheckDecode(b58)
	require.NoError(t, err)
	require.Equal(t, buf, dec)
}