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

import com.airlock.iam.database.infrastructure.JooqConfig;
import com.airlock.iam.techclient.admin.application.service.SubscriptionService;
import com.airlock.iam.techclient.admin.domain.model.PlainTechClientRepository;
import com.airlock.iam.techclient.admin.domain.model.SubscriptionRepository;
import com.airlock.iam.techclient.admin.infrastructure.repository.PlainTechClientRepositoryImpl;
import com.airlock.iam.techclient.admin.infrastructure.repository.SubscriptionRepositoryImpl;
import com.airlock.iam.techclient.domain.model.TechClientRepositorySettings;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import java.util.List;

public final class SubscriptionServiceModule extends PrivateModule {
   @Provides
   JooqConfig provideJooqConfig(TechClientRepositorySettings settings) {
      return new JooqConfig(settings.getDataSource(), settings.getDataSource().getDbType(), null, List.of(), settings.isLogQueries(), settings.getTenantId());
   }

   protected void configure() {
      this.bind(PlainTechClientRepository.class).to(PlainTechClientRepositoryImpl.class);
      this.bind(SubscriptionRepository.class).to(SubscriptionRepositoryImpl.class);
      this.bind(SubscriptionService.class).in(RequestScoped.class);
      this.expose(SubscriptionService.class);
   }
}
