import { Module } from '@nestjs/common'
import { JwtModule } from '@nestjs/jwt'
import { PassportModule } from '@nestjs/passport'

import { UserModule, RoleModule } from '../repositories'
import { AUTH_SECRET_TOKEN, AUTH_JWT_OPTIONS } from '../constants'
import { RolesGuard } from './guards/roles.guard'
import { JwtStrategy } from './jwt.strategy'
import { LocalStrategy } from './local.strategy'
import { AuthService } from './auth.service'

const passportModule = PassportModule.register({ defaultStrategy: 'jwt' })

@Module({
  imports: [
    UserModule,
    RoleModule,
    passportModule,
    JwtModule.registerAsync({
      useFactory: () => ({
        // TODO: LOAD THIS INFO FROM A CLOUD SERVICE FOR SECRETS MANAGEMENT
        secret: AUTH_SECRET_TOKEN,
        signOptions: AUTH_JWT_OPTIONS
      })
    }),
  ],
  providers: [AuthService, LocalStrategy, JwtStrategy, RolesGuard],
  exports: [AuthService, passportModule]
})
export class AuthModule {}