package com.airlock.iam.saml2.domain.model.assertion.attribute;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.domain.model.user.PrincipalInfo;
import com.airlock.iam.saml2.application.configuration.assertion.attribute.RepresenterIdAttributeConfig;
import com.airlock.iam.saml2.domain.model.assertion.FlowSaml2Attribute;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

@LogicForConfig(RepresenterIdAttributeConfig.class)
public class Saml2RepresenterIdAttributeImpl implements Saml2AttributeProvider {
   private final RepresenterIdAttributeConfig config;
   private final Provider<PrincipalInfo> principalInfoProvider;

   @Inject
   public Saml2RepresenterIdAttributeImpl(RepresenterIdAttributeConfig config, Provider<PrincipalInfo> principalInfoProvider) {
      this.config = config;
      this.principalInfoProvider = principalInfoProvider;
   }

   @Override
   public Optional<FlowSaml2Attribute> getAttribute() {
      return ((PrincipalInfo)this.principalInfoProvider.get())
         .tryGetAuthenticatedIdentity()
         .representerId()
         .map(representerId -> new FlowSaml2Attribute(this.config.getSamlAttributeName(), representerId.value(), this.config.getNameFormat()));
   }
}
