import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { AtlasProxyModule } from '../atlas-proxy/atlas-proxy.module';
import { ServiceCredentialModule } from '../common/service-credential/service-credential.module';
import { AtlasRuntimeClient } from './atlas-runtime.client';
import { AutomationsController } from './automations.controller';
import { AutomationsService } from './automations.service';
import { AutomationRateLimitGuard } from './guards/automation-rate-limit.guard';
import { MessageProviderRegistry } from './providers/message-providers';
import { AutomationQueueModule } from './queue/automation-queue.module';
import { AutomationQueueService } from './queue/automation-queue.service';
import {
  AutomationEvent,
  AutomationEventSchema,
} from './schemas/automation-event.schema';
import {
  AutomationJob,
  AutomationJobSchema,
} from './schemas/automation-job.schema';

@Module({
  imports: [
    ServiceCredentialModule,
    AtlasProxyModule,
    AutomationQueueModule.register(),
    MongooseModule.forFeature([
      { name: AutomationEvent.name, schema: AutomationEventSchema },
      { name: AutomationJob.name, schema: AutomationJobSchema },
    ]),
  ],
  controllers: [AutomationsController],
  providers: [
    AutomationsService,
    AtlasRuntimeClient,
    AutomationQueueService,
    AutomationRateLimitGuard,
    MessageProviderRegistry,
  ],
  exports: [
    AutomationsService,
    AtlasRuntimeClient,
    AutomationQueueService,
    MessageProviderRegistry,
  ],
})
export class AutomationsModule {}
