package signature

import (
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"testing"

	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
	"github.com/stretchr/testify/require"
)

type testData struct {
	data []byte
	sig  *refs.Signature
}

func (t testData) SignedDataSize() int { return len(t.data) }
func (t testData) ReadSignedData(data []byte) ([]byte, error) {
	n := copy(data, t.data)
	return data[:n], nil
}
func (t testData) GetSignature() *refs.Signature   { return t.sig }
func (t *testData) SetSignature(s *refs.Signature) { t.sig = s }

func TestWalletConnect(t *testing.T) {
	testCases := [...][]byte{
		{},
		{0},
		{1, 2},
		{3, 4, 5},
		{6, 7, 8, 9, 10, 11, 12},
	}

	pk, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
	require.NoError(t, err)

	for _, tc := range testCases {
		td := &testData{data: tc}
		require.NoError(t, SignData(pk, td, SignWithWalletConnect()))
		require.Equal(t, refs.ECDSA_RFC6979_SHA256_WALLET_CONNECT, td.sig.GetScheme())
		require.NoError(t, VerifyData(td))
	}
}