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

// 核心服务
import { LoggerService } from './services/logger.service';
import { AppLogger } from './services/app-logger.service';

// 日志写入和管理
import { LogWriterService } from './services/log-writer.service';
import { LogManagementService } from './services/log-management.service';
import { LogCleanupService } from './services/log-cleanup.service';

// 分布式追踪
import { TraceContextService } from './services/trace-context.service';

// 采样和告警
import { SamplingService } from './services/sampling.service';
import { AlertService } from './services/alert.service';

// 结构化日志
import { StructuredLoggerService } from './services/structured-logger.service';

// Temporal 日志
import { TemporalLoggerService } from './services/temporal-logger.service';

// 拦截器
import { LoggingInterceptor } from './interceptors/logging.interceptor';

// 控制器
import { LogsController } from './logs.controller';

/**
 * 日志模块
 * 提供全局日志服务和日志管理 API
 * 
 * 核心服务:
 * - LoggerService: 框架内核心实现，用于 Interceptor 等框架服务
 * - AppLogger: 业务日志服务，推荐业务 Controller/Service 使用
 * 
 * 日志写入:
 * - LogWriterService: 异步写入数据库
 * - LogManagementService: 日志查询、配置、统计
 * - LogCleanupService: 定时清理过期日志
 * 
 * 分布式追踪:
 * - TraceContextService: traceId/spanId 生成和管理
 * 
 * 采样和告警:
 * - SamplingService: 高流量日志采样
 * - AlertService: 慢请求/高错误率告警
 * 
 * 结构化日志:
 * - StructuredLoggerService: ELK 兼容的 JSON 格式
 * 
 * Temporal 日志:
 * - TemporalLoggerService: Workflow/Activity 日志
 */
@Global()
@Module({
  controllers: [LogsController],
  providers: [
    // 核心服务
    {
      provide: LoggerService,
      useFactory: () => new LoggerService('Application'),
    },
    AppLogger,

    // 日志写入和管理
    LogWriterService,
    LogManagementService,
    LogCleanupService,

    // 分布式追踪
    TraceContextService,

    // 采样和告警
    SamplingService,
    AlertService,

    // 结构化日志
    StructuredLoggerService,

    // Temporal 日志
    TemporalLoggerService,

    // 拦截器
    LoggingInterceptor,
  ],
  exports: [
    // 核心服务
    LoggerService,
    AppLogger,

    // 日志写入和管理
    LogWriterService,
    LogManagementService,

    // 分布式追踪
    TraceContextService,

    // 采样和告警
    SamplingService,
    AlertService,

    // 结构化日志
    StructuredLoggerService,

    // Temporal 日志
    TemporalLoggerService,

    // 拦截器
    LoggingInterceptor,
  ],
})
export class LoggingModule {}
