import { Module } from '@nestjs/common';
import { AuthModule } from '../../auth/auth.module';
import { LaravelApiModule } from '../../laravel-api/laravel-api.module';
import { ServiceCredentialValidatorService } from '../services/service-credential-validator.service';
import { ServiceCredentialGuard } from '../guards/service-credential/service-credential.guard';
import { LaravelIdentityService } from '../services/laravel-identity.service';

/**
 * Wires the service-credential auth path.
 * - AuthModule supplies the UserJwtGuard / ClientJwtGuard the guard composes. It is
 *   RE-EXPORTED so that any module importing ServiceCredentialModule (pluggy,
 *   pluggy-events, openfinance, master-api) resolves those JWT guards in its own
 *   context, where the ServiceCredentialGuard is instantiated by @UseGuards.
 * - LaravelApiModule exports LaravelApiService, which LaravelIdentityService depends on.
 * - ConfigModule is global (registered in AppModule), so ConfigService is injectable here.
 * - HTTP uses a raw axios instance inside the validator (the codebase has no @nestjs/axios).
 */
@Module({
  imports: [AuthModule, LaravelApiModule],

  providers: [
    ServiceCredentialValidatorService,
    ServiceCredentialGuard,
    LaravelIdentityService,
  ],
  exports: [
    ServiceCredentialValidatorService,
    ServiceCredentialGuard,
    AuthModule,
    LaravelIdentityService,
  ],
})
export class ServiceCredentialModule {}
