package aifin

import (
	"sort"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/extension/registry"
	"github.com/tidbcloud/AgentTeam/internal/extension/runner"
)

func TestExtensionPinsAuthDistributionAndProbeValidator(t *testing.T) {
	t.Parallel()

	ext, err := Extension(staticCredentialSource{
		credentials: runner.Credentials{"apiKey": "unused"},
	})
	require.NoError(t, err)
	require.Equal(t, Revision, ext.Implementation.Revision)
	require.Equal(
		t,
		registry.ConnectionRequired,
		ext.Implementation.ConnectionPolicy,
	)
	require.Equal(t, runner.AuthBearer, ext.Implementation.Auth.Kind)
	require.Equal(t, []runner.CredentialField{
		runner.APIKeyField(
			"Wind API Key",
			"The WIND_API_KEY from your Wind AIFin Market account.",
		),
	}, ext.Implementation.Auth.Fields)
	require.NotNil(t, ext.Implementation.ValidateCredentials)
	require.Equal(t, "app_aifinmarket", ext.Distribution.AppID)
	require.Equal(t, "aifinmarket", ext.Distribution.AppSlug)
	require.Equal(t, "/app-icons/aifinmarket.svg", ext.Distribution.IconURL)
	require.True(t, ext.Distribution.GenericProviderConnection)

	lister, ok := ext.Implementation.Executor.(runner.ActionLister)
	require.True(t, ok)
	want := make([]string, 0, len(ext.Definition.Actions))
	for _, action := range ext.Definition.Actions {
		want = append(want, action.Name)
	}
	sort.Strings(want)
	require.Equal(t, want, lister.ActionNames())
}

func TestExtensionRejectsMissingCredentialSource(t *testing.T) {
	t.Parallel()

	_, err := Extension(nil)
	require.Error(t, err)
}
