package agent

import (
	"log/slog"

	"github.com/tidbcloud/AgentTeam/internal/api/daemon"
	"github.com/tidbcloud/AgentTeam/internal/store/taskboard"
)

func New(logger *slog.Logger, deps StorePortsDeps, fileStore FileStore, taskBoard *taskboard.Store, hub *daemon.Hub, fanout AgentFanout) Dependencies {
	messageStore := &appMessageStore{
		Store:    deps.App,
		messages: deps.Messages,
	}
	return Dependencies{
		Logger: logger,

		Auth: deps.Agents,

		MessageStore:    messageStore,
		RewindStore:     deps.Rewind,
		MessageRecovery: hub,
		MessageFanout:   fanout,
		RuntimeOverlay:  hub,

		ReactionStore:  deps.Reactions,
		ReactionFanout: fanout,

		FileStore:        fileStore,
		AgentAvatarStore: deps.Agents,

		ReviewContextStore:     deps.Review,
		ReviewContextValidator: hub,

		TaskBoard:          NewTaskBoardServiceAdapter(taskBoard),
		TaskTargetResolver: deps.App,
		TaskFanout:         fanout,

		ProjectStore: deps.Review,

		ApprovalSubjects: deps.ApprovalSubjects,
		Teams:            newAgentTeamStore(deps.Teams),
		Channels:         deps.ChannelManagement,

		TriggerOwnerStore: deps.App,

		AgentManagementOwner:   deps.App,
		AgentLifecycleCommands: deps.AgentRuntime,
		AgentRuntimeControl:    hub,
		AgentLifecycleReceipts: deps.AgentOps,

		AgentThreadContexts: messageStore,
	}
}
