import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants';
import { VipCategoryDataService } from './data/services/vip-category-data.service';
import { VipCategoryReadService } from './data/services/vip-category-read.service';
import { VipCategoryReadController } from './infrastructure/vip-category-read.controller';
import { VipCategoryReadOrchestrator } from './domain/usecases/vip-category-read.orchestrator';
import { VipCategoryDataController } from './infrastructure/vip-category-data.controller';
import { VipCategoryDataOrchestrator } from './domain/usecases/vip-category-data.orchestrator';
import { CreateVipCategoryManager } from './domain/usecases/managers/create-vip-category.manager';
import { CqrsModule } from '@nestjs/cqrs';
import { IndexVipCategoryManager } from './domain/usecases/managers/index-vip-category.manager';
import { DeleteVipCategoryManager } from './domain/usecases/managers/delete-vip-category.manager';
import { UpdateVipCategoryManager } from './domain/usecases/managers/update-vip-category.manager';
import { ActiveVipCategoryManager } from './domain/usecases/managers/active-vip-category.manager';
import { ConfirmVipCategoryManager } from './domain/usecases/managers/confirm-vip-category.manager';
import { InactiveVipCategoryManager } from './domain/usecases/managers/inactive-vip-category.manager';
import { DetailVipCategoryManager } from './domain/usecases/managers/detail-vip-category.manager';
import { BatchDeleteVipCategoryManager } from './domain/usecases/managers/batch-delete-vip-category.manager';
import { BatchActiveVipCategoryManager } from './domain/usecases/managers/batch-active-vip-category.manager';
import { BatchConfirmVipCategoryManager } from './domain/usecases/managers/batch-confirm-vip-category.manager';
import { BatchInactiveVipCategoryManager } from './domain/usecases/managers/batch-inactive-vip-category.manager';
import { VipCategoryModel } from './data/models/vip-category.model';

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forFeature([VipCategoryModel], CONNECTION_NAME.DEFAULT),
    CqrsModule,
  ],
  controllers: [VipCategoryDataController, VipCategoryReadController],
  providers: [
    IndexVipCategoryManager,
    DetailVipCategoryManager,
    CreateVipCategoryManager,
    DeleteVipCategoryManager,
    UpdateVipCategoryManager,
    ActiveVipCategoryManager,
    ConfirmVipCategoryManager,
    InactiveVipCategoryManager,
    BatchDeleteVipCategoryManager,
    BatchActiveVipCategoryManager,
    BatchConfirmVipCategoryManager,
    BatchInactiveVipCategoryManager,

    VipCategoryDataService,
    VipCategoryReadService,

    VipCategoryDataOrchestrator,
    VipCategoryReadOrchestrator,
  ],
})
export class VipCategoryModule {}
