package com.airlock.iam.authentication.infrastructure.factory;

import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.common.application.configuration.mtan.BasicMtanSettings;
import com.airlock.iam.common.domain.model.phone.VisiblePhoneNumberDigits;
import com.airlock.iam.common.domain.model.token.mtan.CommonMtanTokenRepository;
import com.airlock.iam.common.domain.service.phone.PhoneNumberService;
import com.airlock.iam.core.domain.model.phone.CountryCallingCode;
import com.airlock.iam.core.misc.impl.authen.mtan.MtanHandler;
import com.airlock.iam.flow.shared.application.configuration.step.apply.ApplyMtanRegistrationChangeConfig;
import com.airlock.iam.flow.shared.domain.service.mtan.MtanRegistrationSettings;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;

@ModuleForConfig(ApplyMtanRegistrationChangeConfig.class)
public final class ApplyMtanRegistrationChangeModule extends PrivateModule {
   @Provides
   BasicMtanSettings provideBasicMtanSettings(ApplyMtanRegistrationChangeConfig config) {
      return config.getMtanSettings();
   }

   @Provides
   MtanHandler provideMtanHandler(BasicMtanSettings settings) {
      return settings.getMtanHandler();
   }

   @Provides
   @Exposed
   CommonMtanTokenRepository provideCommonMtanTokenRepository(MtanHandler mtanHandler) {
      return new CommonMtanTokenRepository(mtanHandler);
   }

   @Provides
   @Exposed
   MtanRegistrationSettings provideRegistrationSettings() {
      return MtanRegistrationSettings.builder().saveAuthTokenId(true).build();
   }

   @Provides
   VisiblePhoneNumberDigits provideVisiblePhoneNumberDigits(BasicMtanSettings settings) {
      return settings.getVisiblePhoneNumberDigits();
   }

   @Provides
   CountryCallingCode provideCountryCallingCode(BasicMtanSettings settings) {
      return settings.getDefaultCountryCode();
   }

   protected void configure() {
      this.bind(PhoneNumberService.class);
      this.expose(PhoneNumberService.class);
   }
}
