package meeting

import (
	"github.com/echochat/backend/app/meeting/controller"
	"github.com/echochat/backend/app/meeting/dao"
	"github.com/echochat/backend/app/meeting/service"
	"github.com/echochat/backend/app/meeting/task"
	"github.com/google/wire"
)

// MeetingSet 会议模块 Wire Provider Set
// 对外暴露：
//   - *service.MeetingService       —— REST 业务服务（Task 5）
//   - *service.MeetingBroadcaster   —— WS 广播中枢（Task 6 新增，供 SignalService 复用）
//   - *service.MeetingSignalService —— WS 信令事件业务逻辑（Task 6）
//   - *controller.MeetingController —— REST API 控制器
//   - *controller.MeetingWSHandler  —— WS 事件 Handler（Task 6，启动时自动注册到 Hub）
// 依赖的接口 NotifyPusher / UserInfoResolver / OnlineChecker 由上游 wire.Bind 绑定具体实现
var MeetingSet = wire.NewSet(
	dao.NewMeetingRoomDAO,
	dao.NewMeetingParticipantDAO,
	dao.NewMeetingChatDAO,
	dao.NewMeetingRecordingDAO, // Phase B 新增：录制记录 DAO
	service.NewMeetingBroadcaster,
	service.NewMeetingLifecycleService, // Task 8 新增：会议生命周期状态机
	service.NewMeetingService,
	service.NewMeetingSignalService,
	service.NewMeetingRecordingService, // Phase B 新增：录制业务服务
	controller.NewMeetingController,
	controller.NewMeetingRecordingController, // Phase B 新增：录制 REST 控制器
	controller.NewMeetingWSHandler,
	task.NewMeetingCleanupTask, // Task 8 新增：生命周期兜底定时任务

	// MediaOrchestrator 使用真实 HTTP 实现（Task 7 落地）
	// 注入 *config.Config，通过 cfg.MediaServer 获取 base_url / internal_token / timeout 等配置
	// 如需回退到本地 stub 调试，可临时改为 service.NewNoopMediaOrchestrator 并调整 wire.Bind
	service.NewHTTPMediaOrchestrator,
	wire.Bind(new(service.MediaOrchestrator), new(*service.HTTPMediaOrchestrator)),
)
