// Package pkulaw registers PKULaw over AgentTeam's shared guarded MCP runtime. It
// exposes five static legal-research Actions over one prepared aggregate or
// four-service fallback topology, without dynamic discovery or call-through.
package pkulaw

import (
	"fmt"

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

const (
	Domain   = "pkulaw"
	Revision = "pkulaw-mcp-v1"
)

func Extension(
	connections runner.ConnectionSource,
) (extension.Extension, error) {
	clients, err := newOperationClients(nil)
	if err != nil {
		return extension.Extension{}, err
	}
	executor, err := newExecutor(connections, clients)
	if err != nil {
		return extension.Extension{}, fmt.Errorf(
			"PKULaw: build executor: %w",
			err,
		)
	}
	return extension.Extension{
		Definition: Definition(),
		Implementation: runner.Implementation{
			Executor:          executor,
			Revision:          Revision,
			ConnectionPolicy:  registry.ConnectionRequired,
			Auth:              AuthSpec(),
			PrepareConnection: PrepareConnection,
			ConnectionConfig:  ConnectionConfigContract(),
		},
		Distribution: extension.Distribution{
			AppID:                     "app_pkulaw",
			AppSlug:                   Domain,
			DefaultName:               Domain,
			DefaultEnabled:            true,
			IconURL:                   "/app-icons/pkulaw.svg",
			GenericProviderConnection: true,
		},
	}, nil
}

func AuthSpec() runner.AuthSpec {
	return runner.AuthSpec{
		Kind: runner.AuthBearer,
		Fields: []runner.CredentialField{
			runner.APIKeyField(
				"PKULaw Access Token",
				"The Access Token from your PKULaw MCP account.",
			),
		},
	}
}
