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

import com.airlock.iam.authentication.application.configuration.rememberme.RememberMeTokenGeneratingStepConfig;
import com.airlock.iam.authentication.domain.model.rememberme.RememberMeCookie;
import com.airlock.iam.authentication.domain.model.rememberme.RememberMeResponse;
import com.airlock.iam.authentication.domain.service.rememberme.RememberMeTokenGenerationService;
import com.airlock.iam.authentication.domain.service.rememberme.RememberMeTokenGenerationServiceImpl;
import com.airlock.iam.authentication.infrastructure.rememberme.RememberMeResponseImpl;
import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.common.application.configuration.rememberme.RememberMeConfig;
import com.airlock.iam.database.infrastructure.JooqConfig;
import com.airlock.iam.flow.shared.domain.model.rememberme.RememberMeTokenRepository;
import com.airlock.iam.flow.shared.infrastructure.rememberme.RememberMeTokenRepositoryImpl;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.Optional;

@ModuleForConfig(RememberMeTokenGeneratingStepConfig.class)
public class RememberMeTokenGeneratingStepModule extends PrivateModule {
   @Provides
   JooqConfig provideJooqConfig(RememberMeConfig config) {
      return config.getRepository().jooqConfig();
   }

   @Provides
   Optional<RememberMeCookie.RememberMeCookieBuilder> provideRememberMeJspCookieBuilder() {
      return Optional.empty();
   }

   protected void configure() {
      this.bind(RememberMeResponse.class).to(RememberMeResponseImpl.class);
      this.expose(RememberMeResponse.class);
      this.bind(RememberMeTokenRepository.class).to(RememberMeTokenRepositoryImpl.class);
      this.expose(RememberMeTokenRepository.class);
      this.bind(RememberMeTokenGenerationService.class).to(RememberMeTokenGenerationServiceImpl.class);
      this.expose(RememberMeTokenGenerationService.class);
   }
}
