import { Module, forwardRef } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from '../../auth/auth.module';
import { AuditModule } from '../audit/audit.module';
import { PaymentSettlementModule } from '../payment-settlement/payment-settlement.module';
import { DriverModule } from '../driver/driver.module';
import { ServicePaymentCollectionEntity } from '../../entities/service-payment-collection.entity';
import { ServicePaymentCollectionConfirmationEntity } from '../../entities/service-payment-collection-confirmation.entity';
import { BookingCashCollectionEntity } from '../../entities/booking-cash-collection.entity';
import { BookingCashCollectionBatchEntity } from '../../entities/booking-cash-collection-batch.entity';
import { MdCashCollectionEntity } from '../../entities/md-cash-collection.entity';
import { BookingEntity } from '../../entities/booking.entity';
import { QueryEntity } from '../../entities/query.entity';
import { BookingTransportItemEntity } from '../../entities/booking-transport-item.entity';
import { BookingActivityItemEntity } from '../../entities/booking-activity-item.entity';
import { BookingSpecialItemEntity } from '../../entities/booking-special-item.entity';
import { PaymentSettlementEntity } from '../../entities/payment-settlement.entity';
import { SettlementPaymentEntity } from '../../entities/settlement-payment.entity';
import { ServicePaymentCollectionService } from './service-payment-collection.service';
import { ServicePaymentCollectionController } from './service-payment-collection.controller';
import { BookingCashCollectionService } from './booking-cash-collection.service';
import { BookingCashCollectionController } from './booking-cash-collection.controller';
import { ServicePaymentCollectionRepository } from './repositories/service-payment-collection.repository';
import { ServicePaymentCollectionConfirmationRepository } from './repositories/service-payment-collection-confirmation.repository';
import { BookingCashCollectionRepository } from './repositories/booking-cash-collection.repository';
import { BookingCashCollectionBatchRepository } from './repositories/booking-cash-collection-batch.repository';
import { MdCashCollectionRepository } from './repositories/md-cash-collection.repository';
import { CollectionAnalyticsRepository } from './repositories/collection-analytics.repository';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      ServicePaymentCollectionEntity,
      ServicePaymentCollectionConfirmationEntity,
      BookingCashCollectionEntity,
      BookingCashCollectionBatchEntity,
      MdCashCollectionEntity,
      BookingEntity,
      QueryEntity,
      BookingTransportItemEntity,
      BookingActivityItemEntity,
      BookingSpecialItemEntity,
      PaymentSettlementEntity,
      SettlementPaymentEntity,
    ]),
    AuthModule,
    AuditModule,
    forwardRef(() => PaymentSettlementModule),
    DriverModule,
  ],
  controllers: [ServicePaymentCollectionController, BookingCashCollectionController],
  providers: [
    ServicePaymentCollectionService,
    BookingCashCollectionService,
    ServicePaymentCollectionRepository,
    ServicePaymentCollectionConfirmationRepository,
    BookingCashCollectionRepository,
    BookingCashCollectionBatchRepository,
    MdCashCollectionRepository,
    CollectionAnalyticsRepository,
  ],
  exports: [ServicePaymentCollectionService, BookingCashCollectionService],
})
export class ServicePaymentCollectionModule {}
