package com.airlock.iam.admin.application.service.activation;

import com.airlock.iam.core.misc.plugin.config.activation.ActivationState;
import com.airlock.iam.core.misc.plugin.config.activation.ActivationStateName;
import java.util.Collection;
import java.util.function.Predicate;

public final class DeploymentUtils {
   private DeploymentUtils() {
      throw new AssertionError();
   }

   public static boolean deploymentOngoing(Collection<ActivationState> states) {
      if (states.isEmpty()) {
         return true;
      }

      for (ActivationState state : states) {
         if (state.getName() == ActivationStateName.IN_PROGRESS) {
            return true;
         }
      }

      return false;
   }

   public static boolean deploymentSuccessful(Collection<ActivationState> states) {
      return deploymentOngoing(states) ? false : states.stream().noneMatch(state -> state.getName() == ActivationStateName.FAILED);
   }

   public static Collection<ActivationState> getFailedStates(Collection<ActivationState> states) {
      return states.stream().filter(filterFor(ActivationStateName.FAILED)).toList();
   }

   public static Collection<ActivationState> getPendingStates(Collection<ActivationState> states) {
      return states.stream().filter(filterFor(ActivationStateName.IN_PROGRESS)).toList();
   }

   private static Predicate<ActivationState> filterFor(ActivationStateName name) {
      return state -> state.getName() == name;
   }
}
