import { Module, forwardRef } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
  ProgramRegistration,
  RegistrationWorkflowStage,
  WorkflowAction,
  WorkflowConfiguration,
  WorkflowStage,
  WorkflowVariableMaster,
  WorkflowConfigurationVariable,
} from 'src/common/entities';
import { CommonDataService } from 'src/common/services/commonData.service';
import { AppLoggerService } from 'src/common/services/logger.service';
import { AuthModule } from 'src/auth/auth.module';
import { UserModule } from 'src/user/user.module';
import { WorkflowController } from './workflow.controller';
import { WorkflowService } from './workflow.service';
import { WorkflowConfigurationRepository } from './repositories/workflow-configuration.repository';
import { WorkflowStageRepository } from './repositories/workflow-stage.repository';
import { WorkflowActionRepository } from './repositories/workflow-action.repository';
import { RegistrationWorkflowStageRepository } from './repositories/registration-workflow-stage.repository';
import { WorkflowVariableMasterRepository } from './repositories/workflow-variable-master.repository';
import { WorkflowConfigurationVariableRepository } from './repositories/workflow-configuration-variable.repository';
import { WorkflowConfigurationService } from './services/workflow-configuration.service';
import { WorkflowStageService } from './services/workflow-stage.service';
import { WorkflowActionService } from './services/workflow-action.service';
import { RegistrationWorkflowStageService } from './services/registration-workflow-stage.service';
import { WorkflowValidationService } from './services/workflow-validation.service';
import { WorkflowPermissionValidationService } from './services/workflow-permission-validation.service';
import { WorkflowVariableService } from './services/workflow-variable.service';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      WorkflowConfiguration,
      WorkflowStage,
      WorkflowAction,
      RegistrationWorkflowStage,
      ProgramRegistration,
      WorkflowVariableMaster,
      WorkflowConfigurationVariable,
    ]),
    forwardRef(() => AuthModule),
    forwardRef(() => UserModule),
  ],
  controllers: [WorkflowController],
  providers: [
    WorkflowService,
    WorkflowConfigurationRepository,
    WorkflowStageRepository,
    WorkflowActionRepository,
    RegistrationWorkflowStageRepository,
    WorkflowVariableMasterRepository,
    WorkflowConfigurationVariableRepository,
    WorkflowConfigurationService,
    WorkflowStageService,
    WorkflowActionService,
    RegistrationWorkflowStageService,
    WorkflowValidationService,
    WorkflowPermissionValidationService,
    WorkflowVariableService,
    CommonDataService,
    AppLoggerService,
  ],
  exports: [
    WorkflowService,
    WorkflowConfigurationService,
    WorkflowStageService,
    WorkflowActionService,
    WorkflowVariableService,
    RegistrationWorkflowStageService,
    WorkflowValidationService,
    WorkflowPermissionValidationService,
  ],
})
export class WorkflowModule {}
