import { forwardRef, Module } from '@nestjs/common';
// import { BullModule } from '@nestjs/bullmq';
import { TypeOrmModule } from '@nestjs/typeorm';

import { CampaignController } from './campaign.controller';
import { CampaignService } from './campaign.services';
import { Campaign } from '../../entities/campaign.entity';
import { Users } from '../../entities/users.entity';
import { CampaignRepository } from './campaign.repository';
import { CampaignInfluencer } from 'src/entities/campaign_influencer.entity';
import { CampaignInfluencerBookmarks } from 'src/entities/campaign_influencer_bookmark.entity';
import { UsersServices } from 'src/common/services/users/users.service';
import { UsersModule } from 'src/common/services/users/users.module';
import { Draft } from 'src/entities/draft.entity';
import { DraftComments } from 'src/entities/draft_comments.entity';
import { DraftVersions } from 'src/entities/draft_versions.entity';
import { Posts } from 'src/entities/posts.entity';
import { SocialMedias } from 'src/entities/social-medias.entity';
import { RejectCompletionRequest } from '../../entities/reject-completion-request.entity';
import { SocketGateway } from 'src/common/services/socket/socket.gateway';
import { InfluenceSaveCampaigns } from 'src/entities/influencer-save-campaigns.entity';
import { CommonModule } from '../common/common.module';
import { CampaignPayment } from 'src/entities/campaign_payment.entity';
import { StripeModule } from 'src/common/services/payment-gateway/stripe/stripe.module';
import { Card } from 'src/entities/card.entity';
import { ReportService } from './report.services';
import { CampaignPaymentHistory } from '../../entities/campaign_payment_history.entity';
import { Settings } from 'src/entities/settings.entity';
import { NotificationModule } from 'src/common/services/notification/notification.module';
import { Categories } from 'src/entities/categories.entity';
import { CampaignCategory } from 'src/entities/campaign-caregories.entity';
import { CampaignRecommended } from 'src/entities/campaign_recommended.entity';
import { InfluencerCampaignRecommended } from 'src/entities/influencer_campaign_recommended.entity';
import { OpenAIService } from 'src/common/services/openai/openai.service';
import { SendMailService } from 'src/common/config/send-mail.service';
import { EncryptionModule } from 'src/common/services/encryption/encryption.module';
import { SocialMediaPosts } from 'src/entities/social-media-posts.entity';
import { Notifications } from 'src/entities/notifications.entity';
import { InstagramServices } from 'src/common/services/instagram/instagram.service';
import { InstagramModule } from 'src/common/services/instagram/instagram.module';
import { WhatsAppModule } from 'src/common/services/whatsapp/whatsapp.module';
import { CountryRecommendedCategory } from 'src/entities/country-recommended-categories.entity';
import { Countries } from 'src/entities/countries.entity';
import { CategoryTranslation } from 'src/entities/category-translations.entity';
import { CampaignCategoryCountryOrder } from 'src/entities/campaign-category-country-order.entity';
import { AiReportLog } from 'src/entities/ai_report_log.entity';
import { CampaignAiReport } from 'src/entities/campaign-ai-report.entity';
import { AiReportService } from './ai-report.service';
// import { AiReportProcessor } from './ai-report.processor';
// import { AI_REPORT_QUEUE } from 'src/common/services/queue/queue.constants';

@Module({
  imports: [TypeOrmModule.forFeature([Campaign, Users, CampaignInfluencer, CampaignInfluencerBookmarks, Draft, DraftComments, DraftVersions, Posts, SocialMedias, RejectCompletionRequest, InfluenceSaveCampaigns, CampaignPayment,
    Card, CampaignPaymentHistory, Settings, Categories, CampaignCategory, SocialMediaPosts, CampaignRecommended, InfluencerCampaignRecommended, Notifications, Posts, Countries, CountryRecommendedCategory, CategoryTranslation, CampaignCategoryCountryOrder, AiReportLog, CampaignAiReport]),
  forwardRef(() => CommonModule),
    StripeModule,
    NotificationModule,
    EncryptionModule,
    InstagramModule,
    WhatsAppModule,
  forwardRef(() => UsersModule),
    // BullModule.registerQueue({ name: AI_REPORT_QUEUE }),
  ],
  controllers: [CampaignController],
  providers: [CampaignService, CampaignRepository, SocketGateway, ReportService, AiReportService, /* AiReportProcessor, */ OpenAIService, SendMailService],
  exports: [CampaignService, CampaignRepository, AiReportService],
})
export class CanpaignModule { }