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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.user.User;
import com.airlock.iam.flow.shared.api.domain.model.valueprovider.ValueMapProvider;
import com.airlock.iam.flow.shared.application.configuration.valueprovider.ContextDataValueMapProviderConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

@LogicForConfig(ContextDataValueMapProviderConfig.class)
public class ContextDataValueMapProvider implements ValueMapProvider {
   private final Provider<User> user;

   @Inject
   public ContextDataValueMapProvider(Provider<User> user) {
      this.user = user;
   }

   @Override
   public Map<String, Object> provideValueMap() {
      if (!((User)this.user.get()).hasName()) {
         return Collections.emptyMap();
      }

      Map<String, Object> map = new HashMap<>();
      map.put("username", ((User)this.user.get()).getName());
      this.userContextData().entrySet().stream().filter(e -> e.getValue() != null).forEach(e -> map.put(e.getKey(), e.getValue()));
      return Map.copyOf(map);
   }

   private Map<String, Object> userContextData() {
      return ((User)this.user.get()).getContextData().asKeyValueMap();
   }
}
