package helper

import (
	"encoding/hex"
	"testing"

	"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
	"github.com/nspcc-dev/neo-go/pkg/encoding/address"
	"github.com/spf13/viper"
	"github.com/stretchr/testify/require"
)

func TestFrostfsIDConfig(t *testing.T) {
	pks := make([]*keys.PrivateKey, 4)
	for i := range pks {
		pk, err := keys.NewPrivateKey()
		require.NoError(t, err)
		pks[i] = pk
	}

	fmts := []string{
		pks[0].GetScriptHash().StringLE(),
		address.Uint160ToString(pks[1].GetScriptHash()),
		hex.EncodeToString(pks[2].PublicKey().UncompressedBytes()),
		hex.EncodeToString(pks[3].PublicKey().Bytes()),
	}

	for i := range fmts {
		v := viper.New()
		v.Set("frostfsid.admin", fmts[i])

		actual, found, err := getFrostfsIDAdmin(v)
		require.NoError(t, err)
		require.True(t, found)
		require.Equal(t, pks[i].GetScriptHash(), actual)
	}

	t.Run("bad key", func(t *testing.T) {
		v := viper.New()
		v.Set("frostfsid.admin", "abc")

		_, found, err := getFrostfsIDAdmin(v)
		require.Error(t, err)
		require.True(t, found)
	})
	t.Run("missing key", func(t *testing.T) {
		v := viper.New()

		_, found, err := getFrostfsIDAdmin(v)
		require.NoError(t, err)
		require.False(t, found)
	})
}