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

import com.airlock.iam.admin.application.configuration.realm.RealmAdministrationConfig;
import com.airlock.iam.admin.domain.model.contextdata.AdminRealmContextDataName;
import com.airlock.iam.admin.domain.model.contextdata.UserRealmContextDataName;
import com.airlock.iam.core.application.configuration.contextdata.StringContextDataItemNameConfig;
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 class RealmModule extends PrivateModule {
   @RequestScoped
   @Provides
   @Exposed
   Optional<AdminRealmContextDataName> provideAdminRealmContextData(Optional<RealmAdministrationConfig> realmAdministrationConfig) {
      return realmAdministrationConfig.map(RealmAdministrationConfig::getAdminRealmContextDataName)
         .<String>map(StringContextDataItemNameConfig::getContextDataName)
         .map(AdminRealmContextDataName::new);
   }

   @RequestScoped
   @Provides
   @Exposed
   Optional<UserRealmContextDataName> provideUserRealmContextData(Optional<RealmAdministrationConfig> realmAdministrationConfig) {
      return realmAdministrationConfig.map(RealmAdministrationConfig::getUserRealmContextDataName)
         .<String>map(StringContextDataItemNameConfig::getContextDataName)
         .map(UserRealmContextDataName::new);
   }

   protected void configure() {
   }
}
