import { Module } from "@nestjs/common"
import { InvoicesService } from "./v1/invoices.service"
import { InvoicesController } from "./v1/invoices.controller"
import { InvoiceRepository } from "./repositories/invoice.repository"
import { TypeOrmModule } from "@nestjs/typeorm"
import { Invoice } from "./entities/invoice.entity"
import { ClientCompanyRepository } from "../clients-companies/repositories/clients-companies.repository"
import { ClientsCompany } from "../clients-companies/entities/clients-company.entity"
import { CustomerRepository } from "../customers/repositories/customers.repository"
import { Customer } from "../customers/entities/customer.entity"
import { AuthService } from "../auth/v1/auth.service"
import { AuthRepository } from "../auth/repositories/auth.repository"
import { UserLoginRepository } from "../auth/repositories/user-login.repository"
import { UserOldPasswordRepository } from "../auth/repositories/old-passwords.repository"
import { RolePermissionRepository } from "../role-permission/repositories/role-permission.repository"
import { Auth } from "../auth/entities/auth.entity"
import { UserLogin } from "../auth/entities/user-login.entity"
import { UserOldPassword } from "../auth/entities/user-old-password.entity"
import { RolePermission } from "../role-permission/entities/role-permission.entity"
import { ExcelService } from "src/utils/xlsx"
import { RoleRepository } from "../role/repositories/role.repository"
import { TeamMemberRepository } from "../team-member/repositories/team_member.repository"
import { Role } from "../role/entities/role.entity"
import { TeamMember } from "../team-member/entities/team_member.entity"
import { TripRepository } from "../trips/repositories/trip.repository"
import { Trip } from "../trips/entities/trip.entity"
import { TripBasePricingRepository } from "../trips/repositories/trip-base-price.repository"
import { InvoiceTripRepository } from "./repositories/trip-invoice.repository"
import { TripAddOnsPricingRepository } from "../trips/repositories/trip-addons-pricing.repository"
import { TripBasePricing } from "../trips/entities/trip-base-pricing.entity"
import { InvoiceTrips } from "./entities/trip-invoice.entity"
import { TripAddonsPricing } from "../trips/entities/trip-addons-pricing.entity"
import { InvoiceSettingsRepository } from "../clients-companies/repositories/invoice-settings.repository"
import { InvoiceSettings } from "../clients-companies/entities/invoice-settings.entity"
import { TripLogsRepository } from "../trips/repositories/trip-logs.repository"
import { TripLog } from "../trips/entities/trip-logs.entity"
import { City } from "../city/entities/city.entity"
import { CityRepository } from "../city/repositories/city.repository"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      Invoice,
      ClientsCompany,
      Customer,
      Auth,
      UserLogin,
      UserOldPassword,
      RolePermission,
      Role,
      TeamMember,
      Trip,
      TripBasePricing,
      InvoiceTrips,
      TripAddonsPricing,
      InvoiceSettings,
      TripLog,
      City,
    ]),
  ],
  controllers: [InvoicesController],
  providers: [
    InvoicesService,
    InvoiceRepository,
    ClientCompanyRepository,
    CustomerRepository,
    AuthService,
    AuthRepository,
    UserLoginRepository,
    UserOldPasswordRepository,
    RolePermissionRepository,
    ExcelService,
    RoleRepository,
    TeamMemberRepository,
    TripRepository,
    TripBasePricingRepository,
    InvoiceTripRepository,
    TripAddOnsPricingRepository,
    InvoiceSettingsRepository,
    TripLogsRepository,
    CityRepository,
  ],
  exports: [InvoicesService, InvoiceRepository],
})
export class InvoicesModule {}
