// Package im contains Workspace IM snapshot, history, mutation, and event-stream routes.
package im

import (
	"log/slog"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/im/fanout"
)

// Dependencies contains collaborators and config for Workspace IM routes.
type Dependencies struct {
	SessionAuth               api.SessionAuthenticator
	WorkspaceStore            api.WorkspaceResolver
	EmailVerificationRequired bool
	Logger                    *slog.Logger

	Messages                   MessageStore
	MessageQueries             MessageQueryStore
	Channels                   ChannelStore
	ChannelAccess              ChannelAccessResolver
	ChannelMembers             ChannelMemberStore
	MessageSearch              MessageSearchStore
	HumanMessages              HumanMessageWriter
	ScopeSnapshotTaskBoard     ScopeSnapshotTaskBoard
	AgentDeliveries            AgentDeliveryStore
	AgentNotifier              AgentNotifier
	ReplyThreadRootPreloader   ReplyThreadRootPreloader
	ScopeFanoutMarker          ScopeFanoutDeliveryMarker
	TaskScopeLifecycle         fanout.TaskScopeLifecycleGuard
	RewindStore                RewindStore
	RewindHub                  RewindHub
	DMs                        DMStore
	OwnerContexts              OwnerContextStore
	ChannelNotifications       ChannelNotificationStore
	ThreadNotifications        ThreadNotificationStore
	Conversations              ConversationStore
	ConversationSidebarThreads ConversationSidebarThreadStore
	Reactions                  ReactionStore
	Pins                       PinStore
	StreamEvents               StreamEventStore
	VisibleScopes              VisibleScopeAuthorizer
	StreamWriter               StreamEventWriter
	StreamSubscriptions        StreamEventSubscriber
	StreamCursors              StreamCursorStore
	ConversationIndex          ConversationIndexStore
	UnreadRuntime              UnreadRuntime
	MessageUnreadRuntime       fanout.UnreadRuntime
	UnreadDeltaSink            UnreadDeltaSink
	RuntimeBootstrap           RuntimeBootstrapSource
	LiveEmitter                *LiveEventEmitter
	ScopeMembershipSync        UserScopeMembershipSync
}
