import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { TypeOrmModule } from '@nestjs/typeorm';

import { Agency } from '../agencies/entities/agency.entity';
import { Booking } from '../bookings/entities/booking.entity';
import { Payment } from '../payments/entities/payment.entity';

import { NotificationsModule } from '../notifications/notifications.module';
import { WebhooksModule } from '../webhooks/webhooks.module';

import { Invoice } from './entities/invoice.entity';
import { InvoiceItem } from './entities/invoice-item.entity';

import { InvoicesController } from './invoices.controller';
import { InvoicesService } from './invoices.service';

import { InvoicePdfService } from './services/invoice-pdf.service';
import { InvoiceQrCodeService } from './services/invoice-qrcode.service';
import { InvoiceStorageService } from './services/invoice-storage.service';
import { InvoiceThermalService } from './services/invoice-thermal.service';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      Invoice,
      InvoiceItem,
      Agency,
      Booking,
      Payment,
    ]),

    NotificationsModule,

    WebhooksModule,

    JwtModule.register({
      secret:
        process.env.JWT_SECRET ||
        'super-secret-demo-change-later',

      signOptions: {
        expiresIn: '7d',
      },
    }),
  ],

  controllers: [
    InvoicesController,
  ],

  providers: [
    InvoicesService,

    /*
    |--------------------------------------------------------------------------
    | PDF
    |--------------------------------------------------------------------------
    */

    InvoicePdfService,

    /*
    |--------------------------------------------------------------------------
    | QR CODE
    |--------------------------------------------------------------------------
    */

    InvoiceQrCodeService,

    /*
    |--------------------------------------------------------------------------
    | STORAGE
    |--------------------------------------------------------------------------
    */

    InvoiceStorageService,

    /*
    |--------------------------------------------------------------------------
    | THERMAL PRINT
    |--------------------------------------------------------------------------
    */

    InvoiceThermalService,
  ],

  exports: [
    InvoicesService,

    InvoicePdfService,

    InvoiceQrCodeService,

    InvoiceStorageService,

    InvoiceThermalService,
  ],
})
export class InvoicesModule {}