import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.services';
import { AuthRepository } from './repositories/auth.repository';
import { HttpModule } from '@nestjs/axios';
import { JwtModule } from '@nestjs/jwt';
import { Constants } from '../../common/constants';
import { PassportModule } from '@nestjs/passport';
import { SendMailService } from '../../common/config/send-mail.service';
import { RecaptchaService } from '../../common/config/recaptcha.service';

import { CommonStrategy } from './strategies/common.strategy';
import { CommonGuard } from '../auth/guards/common.guard';

import { BrandStrategy } from './strategies/brand.strategy';
import { BrandGuard } from './guards/brand.guard';

import { AdminStrategy } from './strategies/admin.strategy';
import { AdminGuard } from './guards/admin.guard';

import { AdminBrandStrategy } from './strategies/admin-brand.strategy';
import { AdminBrandGuard } from '../auth/guards/admin-brand.guard';

import { AdminInfluencerStrategy } from './strategies/admin-influencer.strategy';
import { AdminInfluencerGuard } from '../auth/guards/admin-influencer.guard';

// entities
import { Users } from '../../entities/users.entity';
import { InfluencerStrategy } from './strategies/influencer.strategy';
import { InfluencerGuard } from './guards/influencer.guard';
import { UsersModule } from 'src/common/services/users/users.module';
import { CampaignInfluencer } from 'src/entities/campaign_influencer.entity';
import { NotificationModule } from 'src/common/services/notification/notification.module';
import { QueryCommonGuard } from './guards/common-query.guard';
import { QueryCommonStrategy } from './strategies/query-common.strategy';
import { EncryptionModule } from 'src/common/services/encryption/encryption.module';
import { GuestUserProfileAccess } from 'src/entities/guest_user_profile_access.entity';
import { ErrorLog } from 'src/entities/error-log.entity';
import { ErrorLogModule } from 'src/common/services/error-logs/error-log.module';
import { CommonModule } from '../common/common.module';
import { WhatsAppModule } from 'src/common/services/whatsapp/whatsapp.module';
import { NotificationPreferencesModule } from '../notification-preferences/notification-preferences.module';
import { Countries } from 'src/entities/countries.entity';

@Module({
  imports: [
    JwtModule.register({
      secret: Constants.jwt_secret,
      signOptions: { expiresIn: '7d' },
    }),
    PassportModule,
    HttpModule,
    TypeOrmModule.forFeature([Users, CampaignInfluencer, GuestUserProfileAccess, Countries]),
    UsersModule,
    EncryptionModule,
    NotificationModule,
    ErrorLogModule,
    CommonModule,
    WhatsAppModule,
    NotificationPreferencesModule,
  ],
  controllers: [AuthController],
  providers: [AuthService, AuthRepository, QueryCommonGuard, QueryCommonStrategy, CommonStrategy, CommonGuard, AdminStrategy, AdminGuard, BrandStrategy, BrandGuard, SendMailService, RecaptchaService, InfluencerStrategy, InfluencerGuard, AdminBrandStrategy, AdminBrandGuard, AdminInfluencerStrategy, AdminInfluencerGuard],
})
export class AuthModule { }
