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 { SeasonTypeDataService } from './data/services/season-type-data.service';
import { SeasonTypeReadService } from './data/services/season-type-read.service';
import { SeasonTypeReadController } from './infrastructure/season-type-read.controller';
import { SeasonTypeReadOrchestrator } from './domain/usecases/season-type-read.orchestrator';
import { SeasonTypeDataController } from './infrastructure/season-type-data.controller';
import { SeasonTypeDataOrchestrator } from './domain/usecases/season-type-data.orchestrator';
import { CreateSeasonTypeManager } from './domain/usecases/managers/create-season-type.manager';
import { CqrsModule } from '@nestjs/cqrs';
import { IndexSeasonTypeManager } from './domain/usecases/managers/index-season-type.manager';
import { DeleteSeasonTypeManager } from './domain/usecases/managers/delete-season-type.manager';
import { UpdateSeasonTypeManager } from './domain/usecases/managers/update-season-type.manager';
import { ActiveSeasonTypeManager } from './domain/usecases/managers/active-season-type.manager';
import { ConfirmSeasonTypeManager } from './domain/usecases/managers/confirm-season-type.manager';
import { InactiveSeasonTypeManager } from './domain/usecases/managers/inactive-season-type.manager';
import { DetailSeasonTypeManager } from './domain/usecases/managers/detail-season-type.manager';
import { BatchDeleteSeasonTypeManager } from './domain/usecases/managers/batch-delete-season-type.manager';
import { BatchActiveSeasonTypeManager } from './domain/usecases/managers/batch-active-season-type.manager';
import { BatchConfirmSeasonTypeManager } from './domain/usecases/managers/batch-confirm-season-type.manager';
import { BatchInactiveSeasonTypeManager } from './domain/usecases/managers/batch-inactive-season-type.manager';
import { SeasonTypeModel } from './data/models/season-type.model';
import { SeasonPeriodDataService } from '../season-period/data/services/season-period-data.service';
import { SeasonPeriodModel } from '../season-period/data/models/season-period.model';

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forFeature(
      [SeasonTypeModel, SeasonPeriodModel],
      CONNECTION_NAME.DEFAULT,
    ),
    CqrsModule,
  ],
  controllers: [SeasonTypeDataController, SeasonTypeReadController],
  providers: [
    IndexSeasonTypeManager,
    DetailSeasonTypeManager,
    CreateSeasonTypeManager,
    DeleteSeasonTypeManager,
    UpdateSeasonTypeManager,
    ActiveSeasonTypeManager,
    ConfirmSeasonTypeManager,
    InactiveSeasonTypeManager,
    BatchDeleteSeasonTypeManager,
    BatchActiveSeasonTypeManager,
    BatchConfirmSeasonTypeManager,
    BatchInactiveSeasonTypeManager,

    SeasonTypeDataService,
    SeasonTypeReadService,

    SeasonTypeDataOrchestrator,
    SeasonTypeReadOrchestrator,
    SeasonPeriodDataService,
  ],
})
export class SeasonTypeModule {}
