import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

// Auth
import { AuthModule } from './auth/auth.module';

// LDAP / Active Directory
import { LdapModule } from './ldap/ldap.module';

// Entra (Azure AD)
import { EntraModule } from './entra/entra.module';

// DingTalk
import { DingtalkModule } from './dingtalk/dingtalk.module';

// ADP (PTO sync)
import { AdpModule } from './adp/adp.module';

// Users
import { UsersController } from './users/users.controller';
import { UsersService } from './users/users.service';
import { WorkCityImportService } from './users/work-city-import.service';

// Departments
import { DepartmentsController } from './departments/departments.controller';
import { DepartmentsService } from './departments/departments.service';

// Positions
import { PositionsController } from './positions/positions.controller';
import { PositionsService } from './positions/positions.service';

// Roles
import { RolesController } from './roles/roles.controller';
import { RolesService } from './roles/roles.service';

// Permissions
import { PermissionsController } from './permissions/permissions.controller';
import { PermissionsService } from './permissions/permissions.service';

// Workflow Roles
import { WorkflowRolesController } from './workflow-roles/workflow-roles.controller';
import { WorkflowRolesService } from './workflow-roles/workflow-roles.service';

// Sync
import { SyncController } from './sync/sync.controller';
import { SyncService } from './sync/sync.service';
import { ScheduledSyncService } from './sync/scheduled-sync.service';

// Regions
import { RegionsController } from './regions/regions.controller';
import { RegionsService } from './regions/regions.service';

// User Departments
import { UserDepartmentsController } from './user-departments/user-departments.controller';
import { UserDepartmentsService } from './user-departments/user-departments.service';

// Organizations
import { OrganizationsController } from './organizations/organizations.controller';
import { OrganizationsService } from './organizations/organizations.service';

// AI Tools
import { AIToolsController } from './ai-tools/ai-tools.controller';
import { AIToolsService } from './ai-tools/ai-tools.service';

// IAM 治理（委托 + Access Review + 后台管理）
import { DelegationsController } from './iam-governance/delegations.controller';
import { AccessReviewController } from './iam-governance/access-review.controller';
import { AccessReviewSchedulerService } from './iam-governance/access-review-scheduler.service';
import { DataScopesController } from './iam-governance/data-scopes.controller';
import { RoleDataScopesController } from './iam-governance/role-data-scopes.controller';
import { FieldPermissionsController } from './iam-governance/field-permissions.controller';
import { EmergencyBypassController } from './iam-governance/emergency-bypass.controller';
import { IamAuditController } from './iam-governance/iam-audit.controller';
import { DataScopeAdminService } from './iam-governance/data-scope-admin.service';

// Dependencies
import { PrismaModule } from '@core/database/prisma/prisma.module';

@Module({
  imports: [
    PrismaModule,
    ConfigModule,
    LdapModule,
    AuthModule,
    EntraModule,
    DingtalkModule,
    AdpModule,
  ],
  controllers: [
    UsersController,
    DepartmentsController,
    PositionsController,
    RolesController,
    PermissionsController,
    WorkflowRolesController,
    SyncController,
    RegionsController,
    UserDepartmentsController,
    OrganizationsController,
    AIToolsController,
    DelegationsController,
    AccessReviewController,
    DataScopesController,
    RoleDataScopesController,
    FieldPermissionsController,
    EmergencyBypassController,
    IamAuditController,
  ],
  providers: [
    UsersService,
    WorkCityImportService,
    DepartmentsService,
    PositionsService,
    RolesService,
    PermissionsService,
    WorkflowRolesService,
    SyncService,
    ScheduledSyncService, // 定时同步服务
    RegionsService,
    UserDepartmentsService,
    OrganizationsService,
    AIToolsService,
    AccessReviewSchedulerService,
    DataScopeAdminService,
  ],
  exports: [
    AuthModule,
    UsersService,
    DepartmentsService,
    PositionsService,
    RolesService,
    PermissionsService,
    WorkflowRolesService,
    SyncService,
    RegionsService,
    UserDepartmentsService,
    OrganizationsService,
    AIToolsService,
  ],
})
export class OrganizationModule {}
