package com.airlock.iam.oauth2.domain.model.valueprovider;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.flow.shared.api.domain.model.valueprovider.ValueMapProvider;
import com.airlock.iam.flow.shared.api.domain.service.FlowAttributeService;
import com.airlock.iam.oauth2.application.configuration.valueprovider.OAuth2CredentialContextDataValueMapProviderConfig;
import com.airlock.iam.oauth2.domain.model.oauth2.session.OAuth2CredentialAuthenticationFlowSessionAttribute;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Map;

@LogicForConfig(OAuth2CredentialContextDataValueMapProviderConfig.class)
public class OAuth2CredentialContextDataValueMapProvider implements ValueMapProvider {
   private final Provider<FlowAttributeService> attributes;

   @Inject
   public OAuth2CredentialContextDataValueMapProvider(Provider<FlowAttributeService> attributes) {
      this.attributes = attributes;
   }

   @Override
   public Map<String, Object> provideValueMap() {
      return ((FlowAttributeService)this.attributes.get())
         .findAttribute(OAuth2CredentialAuthenticationFlowSessionAttribute.class)
         .map(OAuth2CredentialAuthenticationFlowSessionAttribute::getContextData)
         .orElse(Map.of());
   }
}
