import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from '../../auth/auth.module';
import { CommunicationTemplateEntity } from '../../entities/communication-template.entity';
import { QueryEntity } from '../../entities/query.entity';
import { BookingEntity } from '../../entities/booking.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 { TenantSettingsEntity } from '../../entities/tenant-settings.entity';
import { UserEntity } from '../../entities/user.entity';
import { DestinationEntity } from '../../entities/destination.entity';
import { ServicePaymentCollectionEntity } from '../../entities/service-payment-collection.entity';
import { CommunicationTemplateController } from './communication-template.controller';
import { CommunicationTemplateService } from './communication-template.service';
import { CommunicationTemplateRepository } from './repositories/communication-template.repository';
import { TemplateRendererService } from './services/template-renderer.service';
import { QueryContextResolver } from './resolvers/query-context.resolver';
import { BookingContextResolver } from './resolvers/booking-context.resolver';
import { MovementSupplierContextResolver } from './resolvers/movement-supplier-context.resolver';
import { MovementCustomerContextResolver } from './resolvers/movement-customer-context.resolver';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      CommunicationTemplateEntity,
      // QueryEntity + TenantSettingsEntity + UserEntity +
      // DestinationEntity are read directly by the context resolver
      // — no cross-module import needed since we only need lookups,
      // no shared service surface.
      QueryEntity,
      BookingEntity,
      BookingTransportItemEntity,
      BookingActivityItemEntity,
      BookingSpecialItemEntity,
      TenantSettingsEntity,
      UserEntity,
      DestinationEntity,
      // MD Payment Collection — resolvers surface expected_amount,
      // currency, status keys for {{#if payment_collection_required}}
      // blocks in the seeded MOVEMENT_SUPPLIER + MOVEMENT_CUSTOMER
      // wrapper templates.
      ServicePaymentCollectionEntity,
    ]),
    // PermissionGuard's dependencies for @Permissions().
    AuthModule,
  ],
  controllers: [CommunicationTemplateController],
  providers: [
    CommunicationTemplateService,
    CommunicationTemplateRepository,
    TemplateRendererService,
    QueryContextResolver,
    BookingContextResolver,
    MovementSupplierContextResolver,
    MovementCustomerContextResolver,
  ],
})
export class CommunicationTemplateModule {}
