import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import databaseConfig from './config/database.config';
import serverConfig from './config/server.config';
import swaggerConfig from './config/swagger.config';
import integrationConfig from './config/integration.config';
import notificationConfig from './config/notification.config';
import fileConfig from './config/file.config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectModule } from './project/project.module';
import { WorkspaceModule } from './workspace/workspace.module';
import { TaskModule } from './task/task.module';
import { AssetModule } from './asset/asset.module';
import { AppModule } from './app/app.module';
import mailConfig from './config/mail.config';
import authConfig from './config/auth.config';
import { CreatorsModule } from './creators/creators.module';
import { FileModule } from './file/file.module';
import { LicenseModule } from './license/license.module';
import supervisorConfig from './config/supervisor.config';
import gamemanagerConfig from './config/gamemanager.config';
import { CollectModule } from './collect/collect.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [
        swaggerConfig,
        serverConfig,
        databaseConfig,
        integrationConfig,
        mailConfig,
        authConfig,
        fileConfig,
        notificationConfig,
        supervisorConfig,
        gamemanagerConfig,
      ],
      isGlobal: true,
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) =>
        configService.get('database'),
      inject: [ConfigService],
    }),
    ProjectModule,
    WorkspaceModule,
    TaskModule,
    AppModule,
    AssetModule,
    CreatorsModule,
    FileModule,
    LicenseModule,
    CollectModule,
  ],
  controllers: [],
  providers: [ConfigService],
})
export class MainModule {}
