import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { JwtAuthGuard } from './jwt-auth.guard';
import { PasswordService } from './password.service';
import { SessionService } from './session.service';

@Module({
  imports: [
    JwtModule.registerAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService) => {
        const secret = config.get<string>('JWT_SECRET');
        // Falhar no boot é melhor que assinar token com segredo default e só
        // descobrir em produção.
        if (!secret)
          throw new Error('JWT_SECRET não definida — confira o .env');
        return { secret };
      },
    }),
  ],
  controllers: [AuthController],
  providers: [AuthService, PasswordService, SessionService, JwtAuthGuard],
  // JwtModule sai reexportado: quem usa o JwtAuthGuard (ex: PoolsModule) precisa
  // do JwtService no próprio contexto, senão o guard não resolve.
  exports: [JwtModule, PasswordService, SessionService, JwtAuthGuard],
})
export class AuthModule {}
