import { Module } from "@nestjs/common"
import { TypeOrmModule } from "@nestjs/typeorm"
import { SalaryStructure } from "./entities/salary-structure.entity"
import { PayrollCycle } from "./entities/payroll-cycle.entity"
import { PayrollEntry } from "./entities/payroll-entry.entity"
import { PayrollEntryComponent } from "./entities/payroll-entry-component.entity"
import { PayrollService } from "./payroll.service"
import { SalaryStructureService } from "./salary-structure.service"
import { PayrollController } from "./payroll.controller"
import { SalaryStructureController } from "./salary-structure.controller"
import { SalaryStructureRepository } from "./repositories/salary-structure.repository"
import { PayrollCycleRepository } from "./repositories/payroll-cycle.repository"
import { PayrollEntryRepository } from "./repositories/payroll-entry.repository"
import { PayrollEntryComponentRepository } from "./repositories/payroll-entry-component.repository"
import { RoleService } from "../role/role.service"
import { RoleRepository } from "../role/repositories/role.repository"
import { EmployeeRepository } from "../employees/repositories/employee.repository"
import { DepartmentRepository } from "../departments/repositories/department.repository"
import { Role } from "../role/entities/role.entity"
import { Employee } from "../employees/entities/employee.entity"
import { Department } from "../departments/entities/department.entity"
import { Company } from "../company/entities/company.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 { CompanySettingsRepository } from "../company/repositories/company-settings.repository"
import { CompanySetting } from "../company/entities/company-settings.entity"
import { CompanyProfileRepository } from "../company/repositories/company-profile.repository"
import { CompanyProfile } from "../company/entities/company-profile.entity"
import { LeaveRequestRepository } from "../leave-requests/repositories/leave-request.repository"
import { LeaveRequest } from "../leave-requests/entities/leave-request.entity"
import { EmployeeSalaryDetailRepository } from "../employees/repositories/employee-salary-detail.repository"
import { EmployeeSalaryDetail } from "../employees/entities/employee-salary-detail.entity"
import { SalarySetting } from "../salary-settings/entities/salary-setting.entity"
import { EmployeeSalaryHistoryRepository } from "../employees/repositories/employee-salary-history.repository"
import { EmployeeSalaryHistory } from "../employees/entities/employee-salary-history.entity"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      SalaryStructure,
      PayrollCycle,
      PayrollEntry,
      PayrollEntryComponent,
      Role,
      Employee,
      Department,
      Company,
      RolePermission,
      CompanySubscription,
      CompanySetting,
      CompanyProfile,
      LeaveRequest,
      EmployeeSalaryDetail,
      SalarySetting,
      EmployeeSalaryHistory,
    ]),
  ],
  controllers: [PayrollController, SalaryStructureController],
  providers: [
    PayrollService,
    SalaryStructureService,
    SalaryStructureRepository,
    PayrollCycleRepository,
    PayrollEntryRepository,
    PayrollEntryComponentRepository,
    RoleService,
    RoleRepository,
    EmployeeRepository,
    DepartmentRepository,
    RolePermissionsService,
    RolePermissionRepository,
    CompanySubscriptionRepository,
    CompanySettingsRepository,
    CompanyProfileRepository,
    LeaveRequestRepository,
    EmployeeSalaryDetailRepository,
    EmployeeSalaryHistoryRepository,
  ],
  exports: [
    TypeOrmModule,
    PayrollService,
    SalaryStructureService,
    SalaryStructureRepository,
    PayrollCycleRepository,
    PayrollEntryRepository,
    PayrollEntryComponentRepository,
  ],
})
export class PayrollModule {}
