import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JwtModule } from '@nestjs/jwt';
import { ConfigModule, ConfigService } from '@nestjs/config';

// Controllers & Services
import { ClientPortalController } from './client-portal.controller';
import { ClientPortalService } from './services/client-portal.service';
import { ClientAuthService } from './services/client-auth.service';
// 🔧 PORTAL-FIX: Import guard so NestJS can inject DataSource into it
import { ClientAuthGuard } from './guards/client-auth.guard';
// 🔧 ROBUSTNESS-FIX: validates brand mailboxes exist at boot time
import { BrandMailboxHealthCheckService } from './services/brand-mailbox-healthcheck.service';

// Entities
import { ClientAccessToken } from './entities/client-access-token.entity';
import { ClientOtpLog } from './entities/client-otp-log.entity';
import { Company } from '../companies/entities/company.entity';
import { CompanyBranch } from '../companies/entities/company-branch.entity';
import { AuditRequest } from '../audit-requests/entities/audit-request.entity';

import { NewCertificate } from '../certificates/entities/new-certificate.entity';
import { AuditScheduleRow } from '../audit-schedules/entities/audit-schedule-row.entity';
import { User } from '../user/entities/user.entity';
import { NcEntity } from '../nc/entities/nc.entity';
import { NcrEntryEntity } from '../nc/entities/ncr-entry.entity';
import { NcRemarkEntity } from '../nc/entities/nc-remark.entity';
// External Modules
import { UserModule } from '../user/user.module';
import { MailsModule } from '../mails/mails.module';
import { NotificationsModule } from '../notifications/notifications.module';
import { EmailSettingsModule } from '../email-settings/email-settings.module';
import { CompanyUser } from './../companies/entities/company-user.entity';
import { ThrottlerModule } from '@nestjs/throttler';
import { NcModule } from '../nc/nc.module';
import { PreviousNcModule } from 'src/previous-nc/previous-nc.module';
import { ClientRefreshToken } from './entities/client-refresh-token.entity';
/**
 * CLIENT PORTAL MODULE
 * Uses dynamic email settings from EmailSettingsModule (same as rest of project)
 */
@Module({
  imports: [
    // Database entities
    TypeOrmModule.forFeature(
      [
        ClientAccessToken,
        ClientOtpLog,
        ClientRefreshToken,
        Company,
        CompanyBranch,
        AuditRequest,
        NewCertificate,
        AuditScheduleRow,
        User,
        CompanyUser,
        NcEntity,
        NcrEntryEntity,
        NcRemarkEntity,
        // NcModule,
      ],
      'scheme_dbs',
    ),
    // JWT configuration
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => ({
        secret: configService.get<string>('JWT_SECRET'),
        signOptions: { expiresIn: '7d' },
      }),
      inject: [ConfigService],
    }),
    ThrottlerModule.forRoot([{ ttl: 60000, limit: 5 }]),
    // ✅ External modules
    UserModule,
    MailsModule,           // Has EmailSettingsModule inside
    NotificationsModule,
    EmailSettingsModule,   // ✅ Add this to use dynamic email settings
    NcModule,
    PreviousNcModule,
  ],
  controllers: [ClientPortalController],
  providers: [
    ClientPortalService,
    ClientAuthService,
    ClientAuthGuard,               // 🔧 PORTAL-FIX: guard needs DI
    BrandMailboxHealthCheckService, // 🔧 ROBUSTNESS-FIX: fails loudly at boot, not silently in prod
  ],
  exports: [ClientPortalService, ClientAuthService],
})
export class ClientPortalModule { }