package com.airlock.iam.plugin.config.manipulator;

import com.airlock.iam.plugin.framework.misc.config.PluginConfigurationDictionary;
import java.util.List;
import java.util.function.Function;

public record SnippetImportResult(PluginConfigurationDictionary dictionary, List<ModificationResult> modificationResults) {
   public int getValidModificationsCount() {
      return this.getNumberOfResultsMatching(ModificationResult::isValid);
   }

   public int getSkippedModificationCount() {
      return this.getNumberOfResultsMatching(ModificationResult::isSkipped);
   }

   public int getFailureModificationCount() {
      return this.getNumberOfResultsMatching(ModificationResult::isFailed);
   }

   public boolean hasFailures() {
      return this.getFailureModificationCount() > 0;
   }

   public boolean hasSkipped() {
      return this.getSkippedModificationCount() > 0;
   }

   public boolean hasModificationResults() {
      return !this.modificationResults.isEmpty();
   }

   private int getNumberOfResultsMatching(Function<ModificationResult, Boolean> statusPredicate) {
      return (int)this.modificationResults.stream().filter(statusPredicate::apply).count();
   }
}
