package mail

import (
	"github.com/tidbcloud/AgentTeam/internal/extension"
	"github.com/tidbcloud/AgentTeam/internal/extension/providers/mail/mailruntime"
	"github.com/tidbcloud/AgentTeam/internal/extension/registry"
	"github.com/tidbcloud/AgentTeam/internal/extension/runner"
)

// Extension composes the Email Builtin with its product Distribution. Mail
// keeps its own multi-field IMAP/SMTP connection API instead of the generic
// REST token connection contract, so it registers ConnectionRequired with
// AuthNone and the generic token endpoints stay unavailable for it.
func Extension(service mailruntime.Invoker) extension.Extension {
	return extension.Extension{
		Definition: Definition(),
		Implementation: runner.Implementation{
			Executor:         NewExecutor(service),
			Revision:         Revision,
			ConnectionPolicy: registry.ConnectionRequired,
			CatalogPolicy:    CatalogPolicy(),
		},
		Distribution: extension.Distribution{
			AppID:          "app_email",
			AppSlug:        "email",
			DefaultName:    "mail",
			DefaultEnabled: false,
			IconURL:        "/app-icons/email.svg",
		},
	}
}
