package com.airlock.iam.flow.infrastructure.factories;

import com.airlock.iam.flow.api.application.configuration.step.FlowStepConfig;
import com.airlock.iam.flow.domain.model.statemachine.spring.StepContext;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

final class StepContextCache {
   private final Map<FlowStepConfig, StepContext> map;

   public List<StepContext> mapToStepContexts(List<FlowStepConfig> configs) {
      return configs.stream().map(this.map::get).collect(Collectors.toList());
   }

   public List<StepContext> getOrderedStepContexts() {
      return this.map.values().stream().sorted(Comparator.comparing(ctx -> ctx.getFlowState().getId())).toList();
   }

   @SuppressFBWarnings(justification = "generated code")
   public StepContextCache(Map<FlowStepConfig, StepContext> map) {
      this.map = map;
   }
}
