package com.airlock.iam.saml2.domain.model.idp;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.flow.api.domain.model.session.FlowAttributeRepository;
import com.airlock.iam.flow.shared.domain.model.uitenantid.UiTenantId;
import com.airlock.iam.flow.shared.domain.model.uitenantid.UiTenantIdRule;
import com.airlock.iam.saml2.application.configuration.idp.Saml2SpEntityIdUiTenantIdRuleConfig;
import com.airlock.iam.saml2.domain.model.sp.Saml2SpEntityId;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

@LogicForConfig(Saml2SpEntityIdUiTenantIdRuleConfig.class)
public final class Saml2IssuerIdUiTenantIdRule implements UiTenantIdRule {
   private final Provider<FlowAttributeRepository> attributeRepository;

   @Inject
   public Saml2IssuerIdUiTenantIdRule(Provider<FlowAttributeRepository> attributeRepository) {
      this.attributeRepository = attributeRepository;
   }

   @Override
   public Optional<UiTenantId> getUiTenantId() {
      return ((FlowAttributeRepository)this.attributeRepository.get())
         .tryGetAttribute(Saml2SpInitiatedRequestAttribute.class)
         .map(Saml2SpInitiatedRequestAttribute::getSpEntityId)
         .map(Saml2SpEntityId::value)
         .map(UiTenantId::new);
   }
}
