import { Module } from "@nestjs/common"
import { TypeOrmModule } from "@nestjs/typeorm"
import { PartyType } from "./entities/party-type.entity"
import { PartyPayment } from "./entities/party-payment.entity"
import { PartyPaymentHistory } from "./entities/party-payment-history.entity"
import { PartyTypesService } from "./party-types.service"
import { PartyTypesController } from "./party-types.controller"
import { PartyTypeRepository } from "./repositories/party-type.repository"
import { PartyPaymentRepository } from "./repositories/party-payment.repository"
import { PartyPaymentHistoryRepository } from "./repositories/party-payment-history.repository"
import { ProjectRepository } from "../projects/repositories/project.repository"
import { ContractorRepository } from "../contractors/repositories/contractor.repository"
import { VendorRepository } from "../vendors/repositories/vendor.repository"
import { ConsultantRepository } from "../consultants/repositories/consultant.repository"
import { RoleService } from "../role/role.service"
import { RoleRepository } from "../role/repositories/role.repository"
import { RolePermissionsService } from "../role-permissions/role-permissions.service"
import { RolePermissionRepository } from "../role-permissions/repositories/role-permission.repository"
import { CompanySubscriptionRepository } from "../company/repositories/company-subscription.repository"
import { EmployeeRepository } from "../employees/repositories/employee.repository"
import { Role } from "../role/entities/role.entity"
import { RolePermission } from "../role-permissions/entities/role-permission.entity"
import { CompanySubscription } from "../company/entities/company-subscription.entity"
import { Employee } from "../employees/entities/employee.entity"
import { Contractor } from "../contractors/entities/contractor.entity"
import { Vendor } from "../vendors/entities/vendor.entity"
import { Consultant } from "../consultants/entities/consultant.entity"
import { Project } from "../projects/entities/project.entity"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      PartyType,
      PartyPayment,
      PartyPaymentHistory,
      Role,
      RolePermission,
      CompanySubscription,
      Employee,
      Contractor,
      Vendor,
      Consultant,
      Project,
    ]),
  ],
  controllers: [PartyTypesController],
  providers: [
    PartyTypesService,
    PartyTypeRepository,
    PartyPaymentRepository,
    PartyPaymentHistoryRepository,
    ProjectRepository,
    ContractorRepository,
    VendorRepository,
    ConsultantRepository,
    RoleService,
    RoleRepository,
    RolePermissionsService,
    RolePermissionRepository,
    CompanySubscriptionRepository,
    EmployeeRepository,
  ],
  exports: [
    TypeOrmModule,
    PartyTypesService,
    PartyTypeRepository,
    PartyPaymentRepository,
    PartyPaymentHistoryRepository,
  ],
})
export class PartyTypesModule {}
