import { Module, Global } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AuditService } from './audit.service';
import { AuditController } from './audit.controller';
import { HashChainService } from './services/hash-chain.service';
import { ComplianceReportService } from './services/compliance-report.service';
import { AuditAlertService } from './services/alert.service';
import { AuditLogInterceptor } from './interceptors/audit-log.interceptor';

/**
 * 审计日志模块
 * 
 * 功能：
 * - 自动记录所有操作的审计日志
 * - 哈希链 + HMAC 签名保护数据完整性
 * - 定期完整性校验
 * - SOX/GDPR 合规报表生成
 * - 敏感操作实时告警
 * 
 * 使用方式：
 * 1. 在需要审计的 Controller 方法上使用 @Auditable() 装饰器
 * 2. 敏感操作使用 @Sensitive() 装饰器
 * 3. 财务操作使用 @Financial() 装饰器
 */
@Global()
@Module({
  imports: [ConfigModule],
  providers: [
    AuditService,
    HashChainService,
    ComplianceReportService,
    AuditAlertService,
    AuditLogInterceptor,
    {
      provide: 'AUDIT_ALERT_INTEGRATION',
      useFactory: (auditService: AuditService, alertService: AuditAlertService) => {
        // 设置告警服务（避免循环依赖）
        auditService.setAlertService(alertService);
        return null;
      },
      inject: [AuditService, AuditAlertService],
    },
  ],
  controllers: [AuditController],
  exports: [
    AuditService,
    AuditLogInterceptor,
    ComplianceReportService,
    AuditAlertService,
  ],
})
export class AuditModule {}
