import { forwardRef, Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
  CommunicationTrack,
  Program,
  ProgramRegistration,
  ProgramSession,
  SessionCommunicationStatus,
  ZoomGeneratedRegistrantLink,
} from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { AwsS3Service } from 'src/common/services/awsS3.service';
import { ResponseService } from 'src/common/response-handling/response-handler';
import { AuthModule } from 'src/auth/auth.module';
import { UserModule } from 'src/user/user.module';
import { CommunicationModule } from 'src/communication/communication.module';
import { QueueModule } from 'src/queue/queue.module';
import { SessionCommunicationController } from './session-communication.controller';
import { SessionCommunicationService } from './session-communication.service';
import { SessionCommunicationRepository } from './session-communication.repository';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      CommunicationTrack,
      Program,
      ProgramRegistration,
      ProgramSession,
      SessionCommunicationStatus,
      ZoomGeneratedRegistrantLink,
    ]),
    forwardRef(() => AuthModule),
    forwardRef(() => UserModule),
    forwardRef(() => CommunicationModule),
    forwardRef(() => QueueModule),
  ],
  controllers: [SessionCommunicationController],
  providers: [
    SessionCommunicationService,
    SessionCommunicationRepository,
    AppLoggerService,
    AwsS3Service,
    ResponseService,
  ],
  exports: [SessionCommunicationService, SessionCommunicationRepository],
})
export class SessionCommunicationModule {}
