/**
 * 位置广播业务模块
 *
 * 功能描述：
 * - 整合位置广播系统的所有业务组件
 * - 配置模块依赖关系和服务注入
 * - 提供统一的模块导出接口
 * - 支持模块化的系统架构
 *
 * 职责分离：
 * - 模块配置：定义模块的提供者、控制器和导出
 * - 依赖管理：管理模块间的依赖关系
 * - 服务注入：配置依赖注入和服务绑定
 * - 接口暴露：向外部模块提供服务接口
 *
 * 技术实现：
 * - NestJS模块：使用@Module装饰器定义模块
 * - 依赖注入：配置服务的依赖注入关系
 * - 模块导入：导入所需的核心模块和外部模块
 * - 接口导出：导出供其他模块使用的服务
 *
 * 最近修改：
 * - 2026-01-08: 功能新增 - 创建位置广播业务模块
 *
 * @author moyin
 * @version 1.0.0
 * @since 2026-01-08
 * @lastModified 2026-01-08
 */

import { Module } from '@nestjs/common';

// 导入核心模块
import { LocationBroadcastCoreModule } from '../../core/location_broadcast_core/location_broadcast_core.module';
import { UserProfilesModule } from '../../core/db/user_profiles/user_profiles.module';
import { LoginCoreModule } from '../../core/login_core/login_core.module';

// 导入业务服务
import {
  LocationBroadcastService,
  LocationSessionService,
  LocationPositionService,
} from './services';
import { CleanupService } from './services/cleanup.service';

// 导入控制器
import { LocationBroadcastController } from './controllers/location_broadcast.controller';
import { HealthController } from './controllers/health.controller';

// 导入WebSocket网关
import { LocationBroadcastGateway } from './location_broadcast.gateway';

// 导入守卫
import { WebSocketAuthGuard } from './websocket_auth.guard';

// 导入中间件
import { RateLimitMiddleware } from './rate_limit.middleware';
import { PerformanceMonitorMiddleware } from './performance_monitor.middleware';

/**
 * 位置广播业务模块
 *
 * 模块职责：
 * - 提供完整的位置广播业务功能
 * - 集成WebSocket实时通信和HTTP API
 * - 管理会话、位置和用户相关的业务逻辑
 * - 提供统一的认证和权限验证
 *
 * 模块结构：
 * - 服务层：业务逻辑处理和数据协调
 * - 控制器层：HTTP API端点和请求处理
 * - 网关层：WebSocket实时通信处理
 * - 守卫层：认证和权限验证
 */
@Module({
  imports: [
    // 导入核心模块
    LocationBroadcastCoreModule,
    UserProfilesModule,
    LoginCoreModule,
  ],
  providers: [
    // 业务服务
    LocationBroadcastService,
    LocationSessionService,
    LocationPositionService,
    CleanupService,

    // 中间件
    RateLimitMiddleware,
    PerformanceMonitorMiddleware,

    // WebSocket网关
    LocationBroadcastGateway,

    // 守卫
    WebSocketAuthGuard,
  ],
  controllers: [
    // HTTP API控制器
    LocationBroadcastController,
    HealthController,
  ],
  exports: [
    // 导出业务服务供其他模块使用
    LocationBroadcastService,
    LocationSessionService,
    LocationPositionService,
    CleanupService,

    // 导出中间件
    RateLimitMiddleware,
    PerformanceMonitorMiddleware,

    // 导出WebSocket网关
    LocationBroadcastGateway,
  ],
})
export class LocationBroadcastModule {
  constructor() {
    console.log('位置广播业务模块已初始化');
  }
}