import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { AccessService } from './domain/access.service';
import { AdminSeedService } from './domain/admin-seed.service';
import { AdminService } from './domain/admin.service';
import { AuthGrpcController } from './domain/auth-grpc.controller';
import { AuthService } from './domain/auth.service';
import { PinService } from './domain/pin.service';
import { RbacService } from './domain/rbac.service';
import { SecurityService } from './domain/security.service';
import { PrismaService } from './infra/prisma.service';
import { RedisService } from './infra/redis.service';
import { SystemSettingsSeedService } from './domain/system-settings.seed';
import { SettingsService } from './domain/settings.service';
import { SessionService } from './domain/session.service';
import { HealthController } from './health.controller';
import { EncryptionService } from './infra/encryption.service';
import { ProfileService } from './domain/profile.service';
import { DocumentsService } from './domain/documents.service';
import { AddressesService } from './domain/addresses.service';
import { OAuthCoreService } from './domain/oauth-core.service';
import { OAuthIssuerService } from './domain/oauth-issuer.service';
import { OtpService } from './domain/otp.service';
import { AdvancedAuthService } from './domain/advanced-auth.service';
import { FamilyService } from './domain/family.service';
import { MediaService } from './domain/media.service';
import { NotificationsService } from './domain/notifications.service';
import { ChatService } from './domain/chat.service';
import { PresenceService } from './domain/presence.service';
import { NotificationPublisherService } from './infra/notification-publisher.service';
import { MinioService } from './infra/minio.service';
import { LdapClientService } from './infra/ldap-client.service';
import { MessagingService } from './infra/messaging.service';
import { SmsService } from './infra/sms.service';
import { TotpService } from './domain/totp.service';
import { MaintenanceSchedulerService } from './domain/maintenance-scheduler.service';
import { BotFatherService } from './domain/bot/bot-father.service';
import { BotApiService } from './domain/bot/bot-api.service';
import { BotRateLimitService } from './domain/bot/bot-rate-limit.service';
import { WebAppCryptoService } from './domain/bot/webapp-crypto.service';
import { TelegramSerializerService } from './domain/bot/telegram-serializer.service';
import { BotUpdateQueueService } from './domain/bot/bot-update-queue.service';
import { BotWebhookDispatcherService } from './domain/bot/bot-webhook-dispatcher.service';
import { BotInboundPublisherService } from './domain/bot/bot-inbound-publisher.service';
import { BotDeliveryService } from './domain/bot/bot-delivery.service';
import { BotMessageConsumerService } from './domain/bot/bot-message-consumer.service';
import { BotInboundService } from './domain/bot/bot-inbound.service';
import { BotCallbackRegistryService } from './domain/bot/bot-callback-registry.service';
import { BotFatherSeedService } from './domain/bot/bot-father-seed.service';
import { BotFatherAssistantService } from './domain/bot/bot-father-assistant.service';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    JwtModule.register({})
  ],
  controllers: [AuthGrpcController, HealthController],
  providers: [
    PrismaService,
    RedisService,
    EncryptionService,
    SystemSettingsSeedService,
    SettingsService,
    AuthService,
    SessionService,
    PinService,
    AccessService,
    AdminSeedService,
    AdminService,
    RbacService,
    SecurityService,
    ProfileService,
    DocumentsService,
    AddressesService,
    OAuthCoreService,
    OAuthIssuerService,
    OtpService,
    AdvancedAuthService,
    TotpService,
    FamilyService,
    MediaService,
    NotificationsService,
    ChatService,
    PresenceService,
    NotificationPublisherService,
    MinioService,
    LdapClientService,
    MessagingService,
    SmsService,
    MaintenanceSchedulerService,
    BotFatherService,
    BotApiService,
    BotRateLimitService,
    WebAppCryptoService,
    TelegramSerializerService,
    BotUpdateQueueService,
    BotWebhookDispatcherService,
    BotInboundPublisherService,
    BotDeliveryService,
    BotMessageConsumerService,
    BotInboundService,
    BotCallbackRegistryService,
    BotFatherSeedService,
    BotFatherAssistantService
  ]
})
export class AppModule {}
