package com.airlock.iam.admin.infrastructure.factory.prot;

import com.airlock.iam.admin.application.configuration.AdminappRestConfigSpec;
import com.airlock.iam.common.domain.service.sms.DefaultSmsValidator;
import com.airlock.iam.common.domain.service.sms.SmsService;
import com.airlock.iam.common.domain.service.sms.SmsService.SmsServiceSettings;
import com.airlock.iam.log.api.signing.SigningLogger;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import java.util.Optional;

public final class SmsServiceModule extends PrivateModule {
   @Provides
   Optional<SmsServiceSettings> smsServiceSettings(AdminappRestConfigSpec config) {
      return config.getSmsServiceConfig()
         .map(
            smsServiceConfig -> SmsServiceSettings.builder()
               .smsGateway(smsServiceConfig.getSmsGateway())
               .smsValidator(new DefaultSmsValidator(smsServiceConfig.getSmsGateway()))
               .configuredOriginator(smsServiceConfig.getOriginator().orElse(""))
               .build()
         );
   }

   @Provides
   @Exposed
   @RequestScoped
   Optional<SmsService> provideSmsService(Optional<SmsServiceSettings> settings, SigningLogger signingLogger) {
      return settings.map(s -> new SmsService(s, signingLogger));
   }

   protected void configure() {
   }
}
