package com.airlock.iam.saml2.infrastructure.service;

import com.airlock.iam.saml2.application.configuration.SamlConfig;
import com.airlock.iam.saml2.application.configuration.sp.Saml2FlowSpConfig;
import com.airlock.iam.saml2.domain.model.sp.Saml2SpEntityId;
import com.airlock.iam.saml2.domain.service.Saml2FlowSpConfigService;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class Saml2FlowSpConfigServiceImpl implements Saml2FlowSpConfigService {
   private final Provider<Optional<SamlConfig>> samlConfig;

   @Inject
   public Saml2FlowSpConfigServiceImpl(Provider<Optional<SamlConfig>> samlConfig) {
      this.samlConfig = samlConfig;
   }

   @Override
   public Optional<Saml2FlowSpConfig> findFlowSpConfig(Saml2SpEntityId spEntityId) {
      return ((Optional)this.samlConfig.get())
         .flatMap(
            config -> config.getSamlFlowSpSettings()
               .stream()
               .filter(saml2FlowSpConfig -> spEntityId.value().equals(saml2FlowSpConfig.getSpEntityConfig().getEntityId()))
               .findFirst()
         );
   }
}
