import { CryptoModule } from '@lib/crypto/src/crypto.module';
import { S3Service } from '@lib/s3/src';
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { AdminRepository } from '../admin/admin.repository';
import { AuditModule } from '../audit/audit.module';
import { MoneyModule } from '../money/money.module';
import { ReferralModule } from '../referral/referral.module';
import { SubscribeModule } from '../subscribe/subscribe/subscribe.module';
import { AdminAuthController } from './admin/auth.controller';
import { AdminAuthService } from './admin/auth.service';
import { AdminSigninRateLimitGuard } from './admin/signin-rate-limit.guard';
import { MokAuthController } from './mok-auth.controller';
import { MokAuthService } from './mok-auth.service';
import { MokClientService } from './mok-client.service';
import { AuthController } from './user/auth.controller';
import { AuthService } from './user/auth.service';

@Module({
  imports: [
    CryptoModule,
    SubscribeModule,
    ReferralModule,
    MoneyModule,
    AuditModule,
  ],
  controllers: [AuthController, MokAuthController, AdminAuthController],
  providers: [
    AdminRepository,
    AuthService,
    AdminAuthService,
    //* JwtService 는 app.module 전역 JwtModule(secret 설정)에서 받는다 — 여기 다시 넣으면 secret 없는
    //*   새 인스턴스가 이 모듈 컨트롤러 가드에 주입돼 verify 가 항상 실패한다(/auth/fcm-token 401)
    MokAuthService,
    ConfigService,
    MokClientService,
    S3Service,
    AdminSigninRateLimitGuard,
  ],
  exports: [AuthService, AdminAuthService],
})
export class AuthModule {}
