/**
 * 日志模块
 *
 * 功能描述：
 * - 配置和提供全局日志服务
 * - 集成 Pino 高性能日志库
 * - 支持不同环境的日志配置
 * - 提供统一的日志记录接口
 *
 * 职责分离：
 * - 模块配置：配置Pino日志库和相关依赖
 * - 服务提供：导出全局可用的日志服务
 * - 环境适配：根据环境变量调整日志策略
 * - 依赖管理：管理日志相关的依赖注入
 *
 * 最近修改：
 * - 2026-01-07: 代码规范优化 - 完善注释文档和模块说明
 *
 * 依赖模块：
 * - ConfigModule: 环境配置模块
 * - PinoLoggerModule: Pino 日志模块
 * - AppLoggerService: 应用日志服务
 *
 * @author moyin
 * @version 1.0.1
 * @since 2025-12-13
 * @lastModified 2026-01-07
 */

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule as PinoLoggerModule } from 'nestjs-pino';
import { ScheduleModule } from '@nestjs/schedule';
import { AppLoggerService } from './logger.service';
import { LoggerConfigFactory } from './logger.config';
import { LogManagementService } from './log_management.service';

/**
 * 日志模块类
 *
 * 职责：
 * - 配置 Pino 日志库的各种选项
 * - 根据环境变量调整日志输出格式和级别
 * - 提供全局可用的日志服务
 * - 管理日志相关的依赖注入
 *
 * 配置说明：
 * - 开发环境：使用 pino-pretty 美化输出，日志级别为 debug
 * - 生产环境：使用 JSON 格式输出，日志级别为 info
 * - 自动过滤请求和响应中的敏感信息
 *
 * 使用场景：
 * - 在 AppModule 中导入，提供全局日志服务
 * - 在其他模块中注入 AppLoggerService 使用
 */
@Module({
  imports: [
    ConfigModule,
    ScheduleModule.forRoot(),
    PinoLoggerModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => {
        return LoggerConfigFactory.createLoggerConfig(configService);
      },
      inject: [ConfigService],
    }),
  ],
  providers: [AppLoggerService, LogManagementService],
  exports: [AppLoggerService, LogManagementService],
})
export class LoggerModule {}
