import { Module } from "@nestjs/common"
import { TypeOrmModule } from "@nestjs/typeorm"
import { Company } from "./entities/company.entity"
import { CompanyProfile } from "./entities/company-profile.entity"
import { CompanySubscription } from "./entities/company-subscription.entity"
import { CompanySubscriptionHistory } from "./entities/company-subscription-history.entity"
import { CompanyService } from "./company.service"
import { CompanyRepository } from "./repositories/company.repository"
import { CompanyProfileRepository } from "./repositories/company-profile.repository"
import { CompanySubscriptionRepository } from "./repositories/company-subscription.repository"
import { CompanySubscriptionHistoryRepository } from "./repositories/company-subscription-history.repository"
import { CompanySettingsRepository } from "./repositories/company-settings.repository"
import { CompanySetting } from "./entities/company-settings.entity"
import { AuthModule } from "../auth/auth.module"
import { AuthRepository } from "../auth/repositories/auth.repository"
import { UserLoginRepository } from "../auth/repositories/user-login.repository"
import { Auth } from "../auth/entities/auth.entity"
import { UserLogin } from "../auth/entities/user-login.entity"
import { Role } from "../role/entities/role.entity"
import { RoleRepository } from "../role/repositories/role.repository"
import { RolePermission } from "../role-permissions/entities/role-permission.entity"
import { RolePermissionRepository } from "../role-permissions/repositories/role-permission.repository"
import { Permission } from "../permissions/entities/permission.entity"
import { PermissionsService } from "../permissions/permissions.service"
import { PermissionRepository } from "../permissions/repositories/permission.repository"
import { CompanyController } from "./company.controller"
import { CompanySubscriptionHistoryService } from "./services/company-subscription-history.service"
import { CompanySubscriptionHistoryController } from "./controllers/company-subscription-history.controller"
import { GuardsModule } from "../../guards/guards.module"
import { EmployeeRepository } from "../employees/repositories/employee.repository"
import { Employee } from "../employees/entities/employee.entity"
import { RoleService } from "../role/role.service"
import { RolePermissionsService } from "../role-permissions/role-permissions.service"
import { AddressModule } from "../address/address.module"
import { AddressRepository } from "../address/repositories/address.repository"
import { Address } from "../address/entities/address.entity"
import { ActivityType } from "../activity-types/entities/activity-type.entity"
import { ActivityTypeRepository } from "../activity-types/repositories/activity-type.repository"
import { DepartmentRepository } from "../departments/repositories/department.repository"
import { Department } from "../departments/entities/department.entity"
import { LeaveTypeRepository } from "../leave-types/repositories/leave-type.repository"
import { LeaveType } from "../leave-types/entities/leave-type.entity"
import { SalarySettingRepository } from "../salary-settings/repositories/salary-setting.repository"
import { SalarySetting } from "../salary-settings/entities/salary-setting.entity"

@Module({
  imports: [
    TypeOrmModule.forFeature([
      Company,
      CompanyProfile,
      CompanySubscription,
      CompanySubscriptionHistory,
      CompanySetting,
      Auth,
      UserLogin,
      Role,
      RolePermission,
      Permission,
      Employee,
      Address,
      ActivityType,
      Department,
      LeaveType,
      SalarySetting,
    ]),
    AuthModule,
    GuardsModule,
    AddressModule,
  ],
  controllers: [CompanyController, CompanySubscriptionHistoryController],
  exports: [
    TypeOrmModule,
    CompanyService,
    CompanyRepository,
    CompanyProfileRepository,
    CompanySubscriptionRepository,
    CompanySubscriptionHistoryRepository,
    CompanySubscriptionHistoryService,
  ],
  providers: [
    CompanyService,
    CompanyRepository,
    CompanyProfileRepository,
    CompanySubscriptionRepository,
    CompanySubscriptionHistoryRepository,
    CompanySubscriptionHistoryService,
    CompanySettingsRepository,
    AuthRepository,
    UserLoginRepository,
    RoleRepository,
    RolePermissionRepository,
    PermissionsService,
    PermissionRepository,
    EmployeeRepository,
    RoleService,
    RoleRepository,
    RolePermissionsService,
    RolePermissionRepository,
    AddressRepository,
    ActivityTypeRepository,
    DepartmentRepository,
    LeaveTypeRepository,
    SalarySettingRepository,
  ],
})
export class CompanyModule {}
