/**
 * Zulip集成业务模块
 * 
 * 功能描述：
 * - 整合Zulip集成相关的业务逻辑和控制器
 * - 提供完整的Zulip集成业务功能模块
 * - 实现游戏与Zulip的业务逻辑协调
 * - 支持WebSocket网关、会话管理、消息过滤等业务功能
 * 
 * 架构设计：
 * - 业务逻辑层：处理游戏相关的业务规则和流程
 * - 核心服务层：封装技术实现细节和第三方API调用
 * - 通过依赖注入实现业务层与技术层的解耦
 * 
 * 业务服务：
 * - ZulipService: 主协调服务，处理登录、消息发送等核心业务流程
 * - CleanWebSocketGateway: WebSocket统一网关，处理客户端连接
 * - SessionManagerService: 会话状态管理和业务逻辑
 * - MessageFilterService: 消息过滤和业务规则控制
 * 
 * 核心服务（通过ZulipCoreModule提供）：
 * - ZulipClientService: Zulip REST API封装
 * - ZulipClientPoolService: 客户端池管理
 * - ConfigManagerService: 配置管理和热重载
 * - ZulipEventProcessorService: 事件处理和消息转换
 * - 其他技术支持服务
 * 
 * 依赖模块：
 * - ZulipCoreModule: Zulip核心技术服务
 * - LoginCoreModule: 用户认证和会话管理
 * - RedisModule: 会话状态缓存
 * - LoggerModule: 日志记录服务
 * 
 * 使用场景：
 * - 游戏客户端通过WebSocket连接进行实时聊天
 * - 游戏内消息与Zulip社群的双向同步
 * - 基于位置的聊天上下文管理
 * - 业务规则驱动的消息过滤和权限控制
 * 
 * @author angjustinl
 * @version 1.1.0
 * @since 2026-01-06
 */

import { Module } from '@nestjs/common';
import { CleanWebSocketGateway } from './clean_websocket.gateway';
import { ZulipService } from './zulip.service';
import { SessionManagerService } from './services/session_manager.service';
import { MessageFilterService } from './services/message_filter.service';
import { ZulipEventProcessorService } from './services/zulip_event_processor.service';
import { SessionCleanupService } from './services/session_cleanup.service';
import { ChatController } from './chat.controller';
import { WebSocketDocsController } from './websocket_docs.controller';
import { WebSocketOpenApiController } from './websocket_openapi.controller';
import { ZulipAccountsController } from './zulip_accounts.controller';
import { WebSocketTestController } from './websocket_test.controller';
import { ZulipCoreModule } from '../../core/zulip_core/zulip_core.module';
import { ZulipAccountsModule } from '../../core/db/zulip_accounts/zulip_accounts.module';
import { RedisModule } from '../../core/redis/redis.module';
import { LoggerModule } from '../../core/utils/logger/logger.module';
import { LoginCoreModule } from '../../core/login_core/login_core.module';
import { AuthModule } from '../auth/auth.module';

@Module({
  imports: [
    // Zulip核心服务模块 - 提供技术实现相关的核心服务
    ZulipCoreModule,
    // Zulip账号关联模块 - 提供账号关联管理功能
    ZulipAccountsModule.forRoot(),
    // Redis模块 - 提供会话状态缓存和数据存储
    RedisModule,
    // 日志模块 - 提供统一的日志记录服务
    LoggerModule,
    // 登录模块 - 提供用户认证和Token验证
    LoginCoreModule,
    // 认证模块 - 提供JWT验证和用户认证服务
    AuthModule,
  ],
  providers: [
    // 主协调服务 - 整合各子服务，提供统一业务接口
    ZulipService,
    // 会话管理服务 - 维护Socket_ID与Zulip_Queue_ID的映射关系
    SessionManagerService,
    // 消息过滤服务 - 敏感词过滤、频率限制、权限验证
    MessageFilterService,
    // Zulip事件处理服务 - 处理Zulip事件队列消息
    ZulipEventProcessorService,
    // 会话清理服务 - 定时清理过期会话
    SessionCleanupService,
    // WebSocket网关 - 处理游戏客户端WebSocket连接
    CleanWebSocketGateway,
  ],
  controllers: [
    // 聊天相关的REST API控制器
    ChatController,
    // WebSocket API文档控制器
    WebSocketDocsController,
    // WebSocket OpenAPI规范控制器
    WebSocketOpenApiController,
    // Zulip账号关联管理控制器
    ZulipAccountsController,
    // WebSocket测试工具控制器 - 提供测试页面和API监控
    WebSocketTestController,
  ],
  exports: [
    // 导出主服务供其他模块使用
    ZulipService,
    // 导出会话管理服务
    SessionManagerService,
    // 导出消息过滤服务
    MessageFilterService,
    // 导出事件处理服务
    ZulipEventProcessorService,
    // 导出会话清理服务
    SessionCleanupService,
    // 导出WebSocket网关
    CleanWebSocketGateway,
  ],
})
export class ZulipModule {}