/**
 * 会话核心模块
 * 
 * 功能描述：
 * - 提供会话管理接口的依赖注入配置
 * - 作为 Core 层模块，不包含具体实现
 * - 实现由 Business 层的 ChatModule 提供
 * 
 * 架构层级：Core Layer（核心层）
 * 
 * 最近修改：
 * - 2026-01-14: 代码规范优化 - 清理未使用的导入 (修改者: moyin)
 * - 2026-01-14: 代码规范优化 - 添加SessionCoreModule类注释 (修改者: moyin)
 * - 2026-01-14: 代码规范优化 - 完善文件头注释，替换AI标识 (修改者: moyin)
 * 
 * @author moyin
 * @version 1.0.3
 * @since 2026-01-14
 * @lastModified 2026-01-14
 */

import { Module, DynamicModule, Provider } from '@nestjs/common';
import { 
  SESSION_QUERY_SERVICE, 
  SESSION_MANAGER_SERVICE,
} from './session_core.interfaces';

/**
 * 会话核心模块配置选项
 */
export interface SessionCoreModuleOptions {
  /**
   * 会话查询服务提供者
   */
  sessionQueryProvider?: Provider;
  
  /**
   * 会话管理服务提供者
   */
  sessionManagerProvider?: Provider;
}

/**
 * 会话核心模块类
 * 
 * 职责：
 * - 提供会话服务的依赖注入配置
 * - 支持动态注册会话查询和管理服务
 * - 作为Core层与Business层的桥梁
 * 
 * 主要方法：
 * - forFeature() - 注册会话服务提供者
 * 
 * 使用场景：
 * - Business层模块注册会话服务实现
 * - 其他模块导入以获取会话查询能力
 */
@Module({})
export class SessionCoreModule {
  /**
   * 注册会话服务提供者
   * 
   * @param options 模块配置选项
   * @returns 动态模块配置
   * 
   * @example
   * // 在 ChatModule 中注册实现
   * SessionCoreModule.forFeature({
   *   sessionQueryProvider: {
   *     provide: SESSION_QUERY_SERVICE,
   *     useExisting: ChatSessionService,
   *   },
   *   sessionManagerProvider: {
   *     provide: SESSION_MANAGER_SERVICE,
   *     useExisting: ChatSessionService,
   *   },
   * })
   */
  static forFeature(options: SessionCoreModuleOptions): DynamicModule {
    const providers: Provider[] = [];
    const exports: string[] = [];

    if (options.sessionQueryProvider) {
      providers.push(options.sessionQueryProvider);
      exports.push(SESSION_QUERY_SERVICE);
    }

    if (options.sessionManagerProvider) {
      providers.push(options.sessionManagerProvider);
      exports.push(SESSION_MANAGER_SERVICE);
    }

    return {
      module: SessionCoreModule,
      providers,
      exports,
    };
  }
}
