import { Module, forwardRef } from '@nestjs/common';
import { ChatHistoryController } from './chat-history.controller';
import { UsersModule } from '../users/users.module';
import { HttpModule } from '@nestjs/axios';
import { ChatGptService } from './services/chat-gpt.service';
import { GoogleService } from './services/google.service';
import { DatabaseModule } from 'src/common/database/database.module';
import { ChatGuardsModule } from 'src/shared/chat-guards/chat-guards.module';
import { ChatGptModule } from 'src/shared/third-party/services/chat-gpt/chat-gpt.module';
import { CompanyAnalyticsModule } from '../company-analytics/company-analytics.module';
import { WebSummerizeService } from './services/webSummerize.service';
import { BlockedMessageService } from './services/blocked-message.service';
import { UserAnalyticsModule } from '../user-analytics/user-analytics.module';
import { ImageHistoryModule } from '../image-history/image-history.module';
import { SubscriptionsModule } from '../subscriptions/subscriptions.module';
import { LanguageModule } from 'src/shared/language/language.module';
import { SocketGuardsModule } from 'src/shared/socket-guards/socket-guards.module';
import { StorageModule } from '../storage/storage.module';
import { ChatHistoryStreamService } from './chat-history-stream.service';
import { FileHandlerStreamService } from './services/file-handler-stream.service';
import { RealTimeDataStreamService } from './services/real-time-data-stream.service';
import { TextGeneratorStreamService } from './services/text-generator-stream.service';
import { ClaudeModule } from 'src/shared/third-party/services/claude/claude.module';
import { ChatHistoryService } from './chat-history.service';
import { TextGeneratorService } from './services/text-generator.service';
import { BlockedImagesModule } from '../blocked-images/blocked-images.module';
import { GeminiModule } from 'src/shared/third-party/services/gemini/gemini.module';
import { FilterSettingModule } from '../filter-setting/filter-setting.module';
import { AiModelsModule } from '../app-config/ai-models/ai-models.module';
import { OpenRouterModule } from 'src/shared/third-party/services/openrouter/openrouter.module';
import { AiOrchestrationModule } from 'src/shared/ai-orchestration/ai-orchestration.module';
import { StreamProcessorService } from './services/stream-processor.service';
import { StreamResponseHandlerService } from './services/stream-response-handler.service';
import { FunctionCallHandlerService } from './services/function-call-handler.service';
import { ChatContextService } from './services/chat-context.service';
import { ChatHistoryTestingService } from './services/chat-history-testing.service';
import { ChatWhatsappService } from './services/chat-whatsapp.service';
import { WhatsappWebModule } from '../whatsapp-web/whatsapp-web.module';
import { WhatsappWebMessagingService } from '../whatsapp-web/whatsapp-web-messaging.service';
import { Whatsapp019Module } from '../whatsapp-019/whatsapp-019.module';
import { Whatsapp019MessagingService } from '../whatsapp-019/services/whatsapp-019-messaging.service';
import { WHATSAPP_OUTBOUND_SERVICE } from '../whatsapp-019/interfaces/whatsapp-outbound.interface';
import { PromptsModule } from '../app-config/prompts/prompts.module';
import { ConfigModule } from '../app-config/config/config.module';


@Module({
	imports: [
		DatabaseModule,
		forwardRef(() => UsersModule),
		HttpModule,
		ChatGuardsModule,
		forwardRef(() => CompanyAnalyticsModule),
		forwardRef(() => UserAnalyticsModule),
		ChatGptModule,
		ClaudeModule,
		forwardRef(() => ImageHistoryModule),
		forwardRef(() => SubscriptionsModule),
		LanguageModule,
		SocketGuardsModule,
		forwardRef(() => StorageModule),
		forwardRef(() => BlockedImagesModule),
		GeminiModule,
		forwardRef(() => FilterSettingModule),
		AiModelsModule,
		OpenRouterModule,
		forwardRef(() => AiOrchestrationModule),
		forwardRef(() => WhatsappWebModule),
		forwardRef(() => Whatsapp019Module),
		PromptsModule,
		ConfigModule,
	],
	controllers: [ChatHistoryController],
	providers: [
		ChatHistoryService,
		ChatHistoryStreamService,
		ChatHistoryTestingService,
		TextGeneratorStreamService,
		RealTimeDataStreamService,
		GoogleService,
		FileHandlerStreamService,
		TextGeneratorService,
		WebSummerizeService,
		BlockedMessageService,
		StreamProcessorService,
		StreamResponseHandlerService,
		FunctionCallHandlerService,
		ChatContextService,
		ChatWhatsappService,
		{
			provide: WHATSAPP_OUTBOUND_SERVICE,
			inject: [Whatsapp019MessagingService, WhatsappWebMessagingService],
			useFactory: (
				service019: Whatsapp019MessagingService,
				serviceWizzo: WhatsappWebMessagingService,
			) => {
				const gateway = (process.env.WHATSAPP_GATEWAY || '019sms').toLowerCase();
				return gateway === 'wizzo' ? serviceWizzo : service019;
			},
		},
	],

	exports: [
		ChatHistoryService,
		ChatHistoryStreamService,
		ChatHistoryTestingService,
		TextGeneratorStreamService,
		RealTimeDataStreamService,
		GoogleService,
		FileHandlerStreamService,
		TextGeneratorService,
		WebSummerizeService,
		BlockedMessageService,
		ChatWhatsappService,
	],
})
export class ChatHistoryModule { }
