package com.airlock.iam.flow.shared.infrastructure.session;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.common.domain.service.mapification.Mapifier;
import com.airlock.iam.flow.api.domain.model.session.FlowAttributeRepository;
import com.airlock.iam.flow.domain.service.session.DefaultFlowAttributeRepository;
import com.airlock.iam.flow.shared.domain.model.session.FlowAttributeRepositoryMapifier;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.List;

public final class FlowAttributeRepositoryMapifierImpl implements FlowAttributeRepositoryMapifier {
   private final Provider<Mapifier> mapifier;

   @Inject
   public FlowAttributeRepositoryMapifierImpl(Provider<Mapifier> mapifier) {
      this.mapifier = mapifier;
   }

   @Override
   public List<MapifiedValues> mapify(FlowAttributeRepository repository) {
      return repository.values().toList().stream().map(((Mapifier)this.mapifier.get())::mapify).toList();
   }

   @Override
   public FlowAttributeRepository demapify(List<MapifiedValues> attributes) {
      DefaultFlowAttributeRepository repository = new DefaultFlowAttributeRepository();
      attributes.forEach(attribute -> repository.putOrMergeAttribute(((Mapifier)this.mapifier.get()).demapify(attribute)));
      return repository;
   }
}
