package com.airlock.iam.flow.shared.domain.model.valueprovider;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.flow.shared.api.domain.model.session.GenericStringsSessionAttribute;
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.flow.shared.application.configuration.valueprovider.GenericSessionAttributeValueMapProviderConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

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

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

   @Override
   public Map<String, Object> provideValueMap() {
      return ((FlowAttributeService)this.attributes.get())
         .findAttribute(GenericStringsSessionAttribute.class)
         .map(attribute -> attribute.getEntries().entrySet().stream().collect(Collectors.toMap(Entry::getKey, stringValue -> stringValue.getValue())))
         .orElse(Collections.emptyMap());
   }
}
