import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { PrismaModule } from '@core/database/prisma/prisma.module';
import { AuthModule } from '../../organization/auth/auth.module';
import { M365DormantController } from './controllers/m365-dormant.controller';
import { M365SyncService } from './services/m365-sync.service';
import { M365UsersService } from './services/m365-users.service';
import { GRAPH_CLIENT_TOKEN, GraphClient } from './graph/graph-client.interface';
import { RealGraphClient } from './graph/real-graph-client';
import { StubGraphClient } from './graph/stub-graph-client';

@Module({
  imports: [PrismaModule, ConfigModule, AuthModule],
  controllers: [M365DormantController],
  providers: [
    M365SyncService,
    M365UsersService,
    RealGraphClient,
    StubGraphClient,
    {
      provide: GRAPH_CLIENT_TOKEN,
      inject: [ConfigService, RealGraphClient, StubGraphClient],
      useFactory: (
        config: ConfigService,
        real: RealGraphClient,
        stub: StubGraphClient,
      ): GraphClient => {
        const stubMode = config.get<string>('OPS_CENTER_M365_STUB') === 'true';
        return stubMode ? stub : real;
      },
    },
  ],
})
export class M365DormantModule {}
