import { Module } from "@nestjs/common"
import { TypeOrmModule } from "@nestjs/typeorm"
import { TimeTracking } from "./entities/time-tracking.entity"
import { ClockInRecord } from "./entities/clock-in-record.entity"
import { Employee } from "../employees/entities/employee.entity"
import { EmployeeSalaryDetail } from "../employees/entities/employee-salary-detail.entity"
import { Project } from "../projects/entities/project.entity"
import { ActivityType } from "../activity-types/entities/activity-type.entity"
import { Company } from "../company/entities/company.entity"
import { TimeTrackingService } from "./time-tracking.service"
import { TimeTrackingController } from "./time-tracking.controller"
import { TimeTrackingRepository } from "./repositories/time-tracking.repository"
import { ClockInRecordRepository } from "./repositories/clock-in-record.repository"
import { EmployeeRepository } from "../employees/repositories/employee.repository"
import { EmployeeSalaryDetailRepository } from "../employees/repositories/employee-salary-detail.repository"
import { EmployeesService } from "../employees/employees.service"
import { SalarySettingRepository } from "../salary-settings/repositories/salary-setting.repository"
import { AuthRepository } from "../auth/repositories/auth.repository"
import { AuthService } from "../auth/auth.service"
import { LeaveType } from "../leave-types/entities/leave-type.entity"
import { EmployeeLeaveBalanceRepository } from "../employee-leave-balances/repositories/employee-leave-balance.repository"
import { EmployeeLeaveBalance } from "../employee-leave-balances/entities/employee-leave-balance.entity"
import { SalarySetting } from "../salary-settings/entities/salary-setting.entity"
import { Auth } from "../auth/entities/auth.entity"
import { ProjectRepository } from "../projects/repositories/project.repository"
import { CompanySetting } from "../company/entities/company-settings.entity"
import { CompanySettingsRepository } from "../company/repositories/company-settings.repository"
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 { EmployeeSalaryHistoryRepository } from "../employees/repositories/employee-salary-history.repository"
import { EmployeeSalaryHistory } from "../employees/entities/employee-salary-history.entity"
import { RoleService } from "../role/role.service"
import { Role } from "../role/entities/role.entity"
import { RoleRepository } from "../role/repositories/role.repository"
import { CompanySubscriptionRepository } from "../company/repositories/company-subscription.repository"
import { CompanySubscription } from "../company/entities/company-subscription.entity"
import { CompanyProfileRepository } from "../company/repositories/company-profile.repository"
import { CompanyProfile } from "../company/entities/company-profile.entity"
import { DepartmentRepository } from "../departments/repositories/department.repository"
import { Department } from "../departments/entities/department.entity"
import { EmployeeInformationRepository } from "../employees/repositories/employee-information.repository"
import { EmployeeInformation } from "../employees/entities/employee-information.entity"
import { ProjectEmployeeRepository } from "../projects/repositories/project-employee.repository"
import { ProjectEmployee } from "../projects/entities/project-employee.entity"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      TimeTracking,
      ClockInRecord,
      Employee,
      EmployeeSalaryDetail,
      Project,
      ActivityType,
      Company,
      LeaveType,
      EmployeeLeaveBalance,
      SalarySetting,
      Auth,
      CompanySetting,
      RolePermission,
      EmployeeSalaryHistory,
      Role,
      CompanySubscription,
      CompanyProfile,
      Department,
      EmployeeInformation,
      ProjectEmployee,
    ]),
  ],
  controllers: [TimeTrackingController],
  providers: [
    TimeTrackingService,
    TimeTrackingRepository,
    ClockInRecordRepository,
    EmployeeRepository,
    EmployeeSalaryDetailRepository,
    EmployeesService,
    SalarySettingRepository,
    AuthRepository,
    AuthService,
    EmployeeLeaveBalanceRepository,
    ProjectRepository,
    CompanySettingsRepository,
    RolePermissionsService,
    RolePermissionRepository,
    EmployeeSalaryHistoryRepository,
    RoleService,
    RoleRepository,
    CompanySubscriptionRepository,
    CompanyProfileRepository,
    DepartmentRepository,
    EmployeeInformationRepository,
    ProjectEmployeeRepository,
  ],
  exports: [
    TypeOrmModule,
    TimeTrackingService,
    TimeTrackingRepository,
    ClockInRecordRepository,
  ],
})
export class TimeTrackingModule {}
