import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ScheduleModule } from '@nestjs/schedule';
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
import configuration from './config/configuration';
import { RedisModule } from '@core/cache/redis/redis.module';
import { IamInfraModule } from '@common/iam-infra.module';
import { DataScopeInterceptor } from '@common/interceptors/data-scope.interceptor';

// ==================== Core - Infrastructure ====================
// Database
import { PrismaModule } from '@core/database/prisma/prisma.module';
// Messaging
import { NotificationModule } from '@core/messaging/notification/notification.module';
// Observability
import { AuditModule } from '@core/observability/audit/audit.module';
import { LoggingModule } from '@core/observability/logging/logging.module';
import { AuditLogInterceptor } from '@core/observability/audit/interceptors/audit-log.interceptor';
// Compute
import { AutomationModule } from '@core/compute/automation/automation.module';
// System
import { HealthModule } from '@core/system/health/health.module';

// ==================== Engines ====================
import { FormEngineModule } from '@engines/form/form-engine/form-engine.module';
import { FormManagementModule } from '@engines/form/form-management/form-management.module';

// ==================== Modules - Business ====================
import { OrganizationModule } from '@modules/organization/organization.module';
import { TicketsModule } from '@modules/tickets/tickets.module';
import { AIAssistantModule } from '@modules/ai-assistant/ai-assistant.module';
import { FeedbackModule } from '@modules/feedback/feedback.module';
import { PartsModule } from '@modules/parts/parts.module';
import { KnowledgeBaseModule } from '@modules/knowledge-base/knowledge-base.module';
import { PerformanceModule } from '@modules/performance/performance.module';
import { DevtrackerModule } from '@modules/devtracker/devtracker.module';
import { MeetingAttendanceModule } from '@modules/meeting-attendance';
import { SiteAttendanceModule } from '@modules/site-attendance';
import { RobotManagerModule } from '@modules/robot-manager/robot-manager.module';
import { M365DormantModule } from '@modules/ops-center/m365-dormant/m365-dormant.module';
import { InternalAppPlatformModule } from '@modules/internal-app-platform';
import { AiUsageModule } from '@modules/ai-usage/ai-usage.module';
import { AgentModule } from '@modules/agent/agent.module';
import { PlatformMasterModule } from '@modules/platform-master';

// ==================== Common ====================
import { JwtAuthGuard } from '@modules/organization/auth/guards/jwt-auth.guard';
import { PermissionsGuard } from '@modules/organization/auth/guards/permissions.guard';
import { RegionGuard } from '@common/guards/region.guard';
import { AllExceptionsFilter } from '@common/filters/http-exception.filter';
import { TransformInterceptor } from '@common/interceptors/transform.interceptor';

@Module({
  imports: [
    // ==================== Configuration ====================
    ConfigModule.forRoot({
      isGlobal: true,
      load: [configuration],
    }),
    ScheduleModule.forRoot(),
    ThrottlerModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (cfg: ConfigService) => [
        {
          ttl: cfg.get<number>('throttler.ttlMs') ?? 30_000,
          limit: cfg.get<number>('throttler.limit') ?? 5,
        },
      ],
    }),

    // ==================== Core Infrastructure ====================
    RedisModule,               // Redis（全局，IAM 硬依赖）
    IamInfraModule,            // IAM Layer 4 共享基础设施（DataScopeService / OrganizationContextService）
    PrismaModule,              // Database
    NotificationModule,        // Messaging
    AuditModule,               // Audit Logs
    LoggingModule,             // Application Logs
    AutomationModule,          // Task Automation
    HealthModule,              // Health Check
    
    // ==================== Engines ====================
    FormEngineModule,          // Form Engine (Headless)
    FormManagementModule,      // Form Business Layer
    
    // ==================== Business Modules ====================
    OrganizationModule,        // IAM, Users, Departments, Regions
    TicketsModule,             // Ticket System
    AIAssistantModule,         // AI Assistant
    FeedbackModule,            // User Feedback
    PartsModule,               // Parts Management
    KnowledgeBaseModule,       // Knowledge Base
    PerformanceModule,         // Performance Management (KPI, 360, Calibration)
    DevtrackerModule,          // DevTracker (Requirements & Tasks)
    MeetingAttendanceModule,   // Meeting Attendance
    SiteAttendanceModule,      // Site Attendance (Fixed Location Check-in)
    RobotManagerModule,        // Robot Manager (Unit CRUD, Status, Reports)
    M365DormantModule,         // Ops Center / M365 dormant accounts
    InternalAppPlatformModule, // Internal App Platform (employee self-serve deploy)
    AiUsageModule,             // AI Coding Tools Usage (#338)
    AgentModule,               // FF AI Agent (PR0.5→PR10.6 完整 Phase 1)
    PlatformMasterModule,      // L1 平台公共主数据（PR1: 字典；PR2 扩 L1a 主数据）
  ],
  providers: [
    // ==================== Global Guards ====================
    // Execution Order: JWT -> Region -> Permissions
    {
      provide: APP_GUARD,
      useClass: JwtAuthGuard,        // 1. JWT Authentication
    },
    {
      provide: APP_GUARD,
      useClass: RegionGuard,          // 2. Region Access Control
    },
    {
      provide: APP_GUARD,
      useClass: PermissionsGuard,     // 3. Permission Check
    },
    
    // ==================== Global Filters ====================
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,  // Exception Handling
    },
    
    // ==================== Global Interceptors ====================
    {
      provide: APP_INTERCEPTOR,
      useClass: TransformInterceptor, // Response Transform
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: AuditLogInterceptor,  // Audit Logging
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: DataScopeInterceptor, // Layer 4 数据权限读路径自动注入 WHERE
    },
  ],
})
export class AppModule {}
