import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { PrismaModule } from '@core/database/prisma/prisma.module';

// Controller
import { DingtalkController } from './dingtalk.controller';

// SDK Services
import { DingtalkAuthService } from './sdk/dingtalk-auth.service';
import { DingtalkYidaService } from './sdk/dingtalk-yida.service';
import { DingtalkAttendanceService } from './sdk/dingtalk-attendance.service';
import { DingtalkHrmService } from './sdk/dingtalk-hrm.service';
import { DingtalkUserService } from './sdk/dingtalk-user.service';

// Sync Services
import { BusinessTripSyncService } from './sync/business-trip-sync.service';
import { FieldApplicationSyncService } from './sync/field-application-sync.service';
import { OvertimeSyncService } from './sync/overtime-sync.service';
import { EmployeeInfoSyncService } from './sync/employee-info-sync.service';
import { AnnualLeaveSyncService } from './sync/annual-leave-sync.service';
import { LeaveExtensionSyncService } from './sync/leave-extension-sync.service';
import { LeaveReminderService } from './sync/leave-reminder.service';
import { TerminationSyncService } from './sync/termination-sync.service';
import { PurchaseSapSyncService } from './sync/purchase-sap-sync.service';

// SAP
import { SapPurchaseService } from './sap/sap-purchase.service';

// Scheduler
import { DingtalkSchedulerService } from './dingtalk-scheduler.service';
import { DingtalkRepairService } from './dingtalk-repair.service';
import { AnnualLeaveInsightService } from './annual-leave-insight.service';
import { AnnualLeavePlanAdminService } from './annual-leave-plan-admin.service';
import { EmployeeManagementService } from './employee-management.service';

@Module({
  imports: [PrismaModule, ConfigModule],
  controllers: [DingtalkController],
  providers: [
    // SDK
    DingtalkAuthService,
    DingtalkYidaService,
    DingtalkAttendanceService,
    DingtalkHrmService,
    DingtalkUserService,
    // Sync
    BusinessTripSyncService,
    FieldApplicationSyncService,
    OvertimeSyncService,
    EmployeeInfoSyncService,
    AnnualLeaveSyncService,
    LeaveExtensionSyncService,
    LeaveReminderService,
    TerminationSyncService,
    PurchaseSapSyncService,
    SapPurchaseService,
    DingtalkRepairService,
    AnnualLeaveInsightService,
    AnnualLeavePlanAdminService,
    EmployeeManagementService,
    // Scheduler
    DingtalkSchedulerService,
  ],
  exports: [DingtalkAuthService, DingtalkSchedulerService],
})
export class DingtalkModule {}
