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 { 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 { NotificationPublisherService } from './infra/notification-publisher.service';
import { MinioService } from './infra/minio.service';
import { LdapClientService } from './infra/ldap-client.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,
    OtpService,
    AdvancedAuthService,
    FamilyService,
    MediaService,
    NotificationsService,
    ChatService,
    NotificationPublisherService,
    MinioService,
    LdapClientService
  ]
})
export class AppModule {}
