import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from '../../auth/auth.module';
import { TaxTypeController } from './tax-type.controller';
import { TaxTypeService } from './tax-type.service';
import { TaxTypeRepository } from './repositories/tax-type.repository';
import { TaxTypeEntity } from '../../entities/tax-type.entity';
import { TaxSlabEntity } from '../../entities/tax-slab.entity';
import { TaxComponentEntity } from '../../entities/tax-component.entity';
import { DestinationEntity } from '../../entities/destination.entity';
import { TransportServiceEntity } from '../../entities/transport-service.entity';
import { ActivityEntity } from '../../entities/activity.entity';
import { SupplierEntity } from '../../entities/supplier.entity';
import { TaxSlabController } from './tax-slab.controller';
import { TaxSlabService } from './tax-slab.service';
import { TaxSnapshotService } from './tax-snapshot.service';
import { TaxSlabResolverService } from '../../common/services/tax-slab-resolver.service';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      TaxTypeEntity,
      TaxSlabEntity,
      TaxComponentEntity,
      // Resolver-hierarchy entities: the per-line slab resolver reads
      // tax_slab_id off these masters when walking the override →
      // destination-default chain. Registering them here lets the
      // resolver live in this module without forcing every consumer to
      // wire the repositories themselves.
      DestinationEntity,
      TransportServiceEntity,
      ActivityEntity,
      SupplierEntity,
    ]),
    AuthModule,
  ],
  controllers: [TaxTypeController, TaxSlabController],
  providers: [
    TaxTypeService,
    TaxTypeRepository,
    TaxSlabService,
    TaxSnapshotService,
    TaxSlabResolverService,
  ],
  exports: [
    TaxTypeService,
    TaxTypeRepository,
    TaxSlabService,
    TaxSnapshotService,
    TaxSlabResolverService,
  ],
})
export class TaxTypeModule {}

