import { Module } from "@nestjs/common"
import { TypeOrmModule } from "@nestjs/typeorm"
import { Project } from "./entities/project.entity"
import { ProjectEmployee } from "./entities/project-employee.entity"
import { ProjectPartyAssignment } from "./entities/project-party-assignment.entity"
import { ProjectCompletionLog } from "./entities/project-completion-log.entity"
import { ProjectsService } from "./projects.service"
import { ProjectsController } from "./projects.controller"
import { ProjectRepository } from "./repositories/project.repository"
import { ProjectEmployeeRepository } from "./repositories/project-employee.repository"
import { ProjectPartyAssignmentRepository } from "./repositories/project-party-assignment.repository"
import { ProjectCompletionLogRepository } from "./repositories/project-completion-log.repository"
import { TimeTrackingRepository } from "../time-tracking/repositories/time-tracking.repository"
import { TimeTracking } from "../time-tracking/entities/time-tracking.entity"
import { Vendor } from "../vendors/entities/vendor.entity"
import { Contractor } from "../contractors/entities/contractor.entity"
import { Consultant } from "../consultants/entities/consultant.entity"
import { PartyPayment } from "../party-types/entities/party-payment.entity"
import { EmployeeRepository } from "../employees/repositories/employee.repository"
import { Employee } from "../employees/entities/employee.entity"
import { RoleService } from "../role/role.service"
import { RoleRepository } from "../role/repositories/role.repository"
import { Role } from "../role/entities/role.entity"
import { RolePermissionsService } from "../role-permissions/role-permissions.service"
import { RolePermissionRepository } from "../role-permissions/repositories/role-permission.repository"
import { RolePermission } from "../role-permissions/entities/role-permission.entity"
import { CompanySubscriptionRepository } from "../company/repositories/company-subscription.repository"
import { CompanySubscription } from "../company/entities/company-subscription.entity"
import { NotificationModule } from "../notification/notification.module"
import { PartyPaymentHistoryRepository } from "../party-types/repositories/party-payment-history.repository"
import { PartyPaymentHistory } from "../party-types/entities/party-payment-history.entity"
import { PermissionRepository } from "../permissions/repositories/permission.repository"
import { Permission } from "../permissions/entities/permission.entity"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      Project,
      ProjectEmployee,
      ProjectPartyAssignment,
      ProjectCompletionLog,
      TimeTracking,
      Vendor,
      Contractor,
      Consultant,
      PartyPayment,
      Employee,
      Role,
      RolePermission,
      CompanySubscription,
      PartyPaymentHistory,
      Permission,
    ]),
    NotificationModule,
  ],
  controllers: [ProjectsController],
  providers: [
    ProjectsService,
    ProjectRepository,
    ProjectEmployeeRepository,
    ProjectPartyAssignmentRepository,
    ProjectCompletionLogRepository,
    TimeTrackingRepository,
    EmployeeRepository,
    RoleService,
    RoleRepository,
    RolePermissionsService,
    RolePermissionRepository,
    CompanySubscriptionRepository,
    PartyPaymentHistoryRepository,
    PermissionRepository,
  ],
  exports: [
    TypeOrmModule,
    ProjectsService,
    ProjectRepository,
    ProjectEmployeeRepository,
    ProjectPartyAssignmentRepository,
    PermissionRepository,
    RolePermissionRepository,
  ],
})
export class ProjectsModule {}
