/**
 * Infrastructure Module
 *
 * mpc-service 作为网关，需要:
 * - PrismaService 用于缓存公钥和 delegate share
 * - Kafka 事件发布和消费
 * - BackupClientService 用于存储 delegate share 到 backup-service
 * - BlockchainClientService 用于派生钱包地址
 */

import { Global, Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { HttpModule } from '@nestjs/axios';

// Persistence
import { PrismaService } from './persistence/prisma/prisma.service';

// Kafka Messaging
import { EventPublisherService } from './messaging/kafka/event-publisher.service';
import { EventConsumerService } from './messaging/kafka/event-consumer.service';

// External Services
import { BackupClientService } from './external/backup';
import { BlockchainClientService } from './external/blockchain';

// Redis
import { DistributedLockService } from './redis/lock/distributed-lock.service';

@Global()
@Module({
  imports: [
    ConfigModule,
    HttpModule.register({
      timeout: 30000,
      maxRedirects: 5,
    }),
  ],
  providers: [
    // Prisma (用于缓存公钥和 delegate share)
    PrismaService,

    // Kafka (事件发布和消费)
    EventPublisherService,
    EventConsumerService,

    // External Services
    BackupClientService,
    BlockchainClientService,

    // Redis (分布式锁)
    DistributedLockService,
  ],
  exports: [
    PrismaService,
    EventPublisherService,
    EventConsumerService,
    BackupClientService,
    BlockchainClientService,
    DistributedLockService,
  ],
})
export class InfrastructureModule {}
