/**
 * 位置广播核心模块
 * 
 * 功能描述：
 * - 提供位置广播系统核心服务的模块配置
 * - 管理核心服务的依赖注入和生命周期
 * - 集成Redis缓存和用户档案数据服务
 * - 为业务层提供统一的核心服务接口
 * 
 * 职责分离：
 * - 模块配置：定义核心服务的提供者和导出
 * - 依赖管理：配置服务间的依赖注入关系
 * - 接口抽象：提供统一的服务接口供业务层使用
 * - 生命周期：管理核心服务的初始化和销毁
 * 
 * 架构设计：
 * - 核心层：提供技术基础设施和数据管理
 * - 服务解耦：通过接口实现服务间的松耦合
 * - 可测试性：支持Mock服务进行单元测试
 * - 可扩展性：便于添加新的核心服务
 * 
 * 最近修改：
 * - 2026-01-12: 代码规范优化 - 处理TODO项，移除核心服务相关的TODO注释 (修改者: moyin)
 * - 2026-01-08: 功能新增 - 创建位置广播核心模块配置
 * 
 * @author moyin
 * @version 1.0.1
 * @since 2026-01-08
 * @lastModified 2026-01-12
 */

import { Module } from '@nestjs/common';
import { LocationBroadcastCore } from './location_broadcast_core.service';
import { UserPositionCore } from './user_position_core.service';
import { UserProfilesModule } from '../db/user_profiles/user_profiles.module';
import { RedisModule } from '../redis/redis.module';

/**
 * 位置广播核心模块类
 * 
 * 职责：
 * - 配置位置广播系统的核心服务
 * - 管理服务间的依赖关系和注入
 * - 提供统一的核心服务接口
 * - 支持业务层的功能实现
 * 
 * 模块特性：
 * - 核心服务：LocationBroadcastCore, UserPositionCore
 * - 依赖模块：UserProfilesModule, RedisModule
 * - 接口导出：提供标准化的服务接口
 * - 配置灵活：支持不同环境的配置需求
 * 
 * 服务说明：
 * - LocationBroadcastCore: 位置广播的核心逻辑和缓存管理
 * - UserPositionCore: 用户位置的数据库持久化管理
 * 
 * 依赖说明：
 * - UserProfilesModule: 提供用户档案数据访问服务
 * - RedisModule: 提供Redis缓存服务
 * 
 * 使用场景：
 * - 业务层模块导入此模块获取核心服务
 * - 单元测试时Mock核心服务接口
 * - 系统集成时配置核心服务依赖
 */
@Module({
  imports: [
    // 导入用户档案模块，提供数据库访问能力
    UserProfilesModule.forRoot(), // 自动根据环境选择MySQL或内存模式
    
    // 导入Redis模块，提供缓存服务
    RedisModule, // 使用现有的Redis模块配置
  ],
  providers: [
    // 位置广播核心服务
    LocationBroadcastCore,
    {
      provide: 'ILocationBroadcastCore',
      useClass: LocationBroadcastCore,
    },
    
    // 用户位置持久化核心服务
    UserPositionCore,
    {
      provide: 'IUserPositionCore',
      useClass: UserPositionCore,
    },
    
    // 后续版本可以添加更多核心服务
    // LocationSessionCore,
    // LocationPositionCore,
    // LocationBroadcastEventService,
    // LocationBroadcastConfigService,
  ],
  exports: [
    // 导出核心服务供业务层使用
    LocationBroadcastCore,
    'ILocationBroadcastCore',
    
    UserPositionCore,
    'IUserPositionCore',
    
    // 后续版本将导出其他核心服务接口
    // 'ILocationSessionCore',
    // 'ILocationPositionCore',
    // 'ILocationBroadcastEventService',
    // 'ILocationBroadcastConfigService',
  ],
})
export class LocationBroadcastCoreModule {
  /**
   * 模块初始化时的日志记录
   */
  constructor() {
    console.log('🚀 LocationBroadcastCoreModule initialized');
  }
}