/**
 * Zulip核心服务模块
 *
 * 功能描述：
 * - 提供Zulip技术实现相关的核心服务
 * - 封装第三方API调用和技术细节
 * - 为业务层提供抽象接口
 *
 * 职责分离：
 * - 技术实现层：专注Zulip API集成和客户端管理
 * - 服务抽象层：为业务层提供统一的服务接口
 *
 * 最近修改：
 * - 2026-01-12: 架构优化 - 移除ZulipAccountsBusinessService引用，符合架构分层规范 (修改者: moyin)
 * - 2026-01-12: 代码规范优化 - 添加缺失的类注释和修正注释规范 (修改者: moyin)
 * - 2026-01-12: 代码规范优化 - 修正注释规范和修改记录格式 (修改者: moyin)
 * - 2026-01-07: 代码规范优化 - 修正文件夹命名(zulip->zulip_core)和文件命名规范 (修改者: moyin)
 *
 * @author moyin
 * @version 1.1.2
 * @since 2025-12-31
 * @lastModified 2026-01-12
 */

import { Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache-manager';
import { ZulipClientService } from './services/zulip_client.service';
import { ZulipClientPoolService } from './services/zulip_client_pool.service';
import { ConfigManagerService } from './services/config_manager.service';
import { DynamicConfigManagerService } from './services/dynamic_config_manager.service';
import { ApiKeySecurityService } from './services/api_key_security.service';
import { ErrorHandlerService } from './services/error_handler.service';
import { MonitoringService } from './services/monitoring.service';
import { StreamInitializerService } from './services/stream_initializer.service';
import { UserManagementService } from './services/user_management.service';
import { UserRegistrationService } from './services/user_registration.service';
import { ZulipAccountService } from './services/zulip_account.service';
import { AppLoggerService } from '../utils/logger/logger.service';
import { RedisModule } from '../redis/redis.module';

// 缓存配置常量
const CACHE_TTL_SECONDS = 300; // 5分钟缓存
const CACHE_MAX_ITEMS = 1000; // 最大缓存项数

/**
 * Zulip核心服务模块类
 *
 * 职责：
 * - 配置和注册所有Zulip核心服务
 * - 管理服务之间的依赖关系
 * - 为业务层提供统一的服务接口
 * - 集成Redis和缓存模块
 *
 * 主要服务：
 * - ZulipClientService - Zulip客户端核心服务
 * - ZulipClientPoolService - 客户端连接池服务
 * - ConfigManagerService - 配置管理服务
 * - ApiKeySecurityService - API Key安全服务
 * - ErrorHandlerService - 错误处理服务
 * - MonitoringService - 监控服务
 *
 * 使用场景：
 * - 在业务模块中导入以获取Zulip核心服务
 * - 通过依赖注入使用各种Zulip相关服务
 * - 为整个应用提供Zulip集成能力
 */
@Module({
  imports: [
    // Redis模块 - ApiKeySecurityService需要REDIS_SERVICE
    RedisModule,
    // 缓存模块 - 核心服务需要缓存支持
    CacheModule.register({
      ttl: CACHE_TTL_SECONDS,
      max: CACHE_MAX_ITEMS,
    }),
  ],
  providers: [
    // 核心客户端服务
    {
      provide: 'ZULIP_CLIENT_SERVICE',
      useClass: ZulipClientService,
    },
    {
      provide: 'ZULIP_CLIENT_POOL_SERVICE',
      useClass: ZulipClientPoolService,
    },
    {
      provide: 'ZULIP_CONFIG_SERVICE',
      useClass: ConfigManagerService,
    },
    {
      provide: 'API_KEY_SECURITY_SERVICE',
      useClass: ApiKeySecurityService,
    },

    // 辅助服务
    ApiKeySecurityService,
    ConfigManagerService,
    DynamicConfigManagerService,
    ErrorHandlerService,
    MonitoringService,
    StreamInitializerService,
    UserManagementService,
    UserRegistrationService,
    ZulipAccountService,
    AppLoggerService,

    // 直接提供类（用于内部依赖）
    ZulipClientService,
    ZulipClientPoolService,
  ],
  exports: [
    // 导出接口标识符供业务层使用
    'ZULIP_CLIENT_SERVICE',
    'ZULIP_CLIENT_POOL_SERVICE',
    'ZULIP_CONFIG_SERVICE',
    'API_KEY_SECURITY_SERVICE',

    // 导出辅助服务
    ApiKeySecurityService,
    ConfigManagerService,
    DynamicConfigManagerService,
    ErrorHandlerService,
    MonitoringService,
    StreamInitializerService,
    UserManagementService,
    UserRegistrationService,
    ZulipAccountService,
  ],
})
export class ZulipCoreModule {}