//
// Copyright Coinbase, Inc. All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

package gennaro

import (
	"math/big"
	"testing"

	"github.com/btcsuite/btcd/btcec"
	"github.com/stretchr/testify/require"

	"source.quilibrium.com/quilibrium/monorepo/nekryptology/internal"
	"source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves"
)

var testGenerator, _ = curves.NewScalarBaseMult(btcec.S256(), big.NewInt(3333))

func TestNewParticipantWorks(t *testing.T) {
	p, err := NewParticipant(1, 2, testGenerator, curves.NewK256Scalar(), 2)
	require.NoError(t, err)
	require.NotNil(t, p)
	require.Equal(t, p.id, uint32(1))
	require.Equal(t, p.round, 1)
	require.Equal(t, p.curve, btcec.S256())
	require.NotNil(t, p.pedersen)
	require.NotNil(t, p.feldman)
	require.Nil(t, p.pedersenResult)
	require.NotNil(t, p.otherParticipantShares)
	require.NotNil(t, p.scalar)
	_, ok := p.otherParticipantShares[2]
	require.True(t, ok)
}

func TestNewParticipantBadInputs(t *testing.T) {
	_, err := NewParticipant(0, 0, nil, nil)
	require.Error(t, err)
	require.Equal(t, err, internal.ErrNilArguments)
	_, err = NewParticipant(1, 2, nil, nil)
	require.Error(t, err)
	require.Equal(t, err, internal.ErrNilArguments)
	_, err = NewParticipant(1, 2, testGenerator, nil)
	require.Error(t, err)
	require.Equal(t, err, internal.ErrNilArguments)
}