package com.airlock.iam.oauth2.infrastructure.discovery.compatibility;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

public final class OpenIDConnectIncompatibilityNoneFoundValuesSupported<T> implements OpenIDConnectIncompatibility {
   static final String DELIMITER = ",";
   private final OpenIDConnectConfiguration configuration;
   private final Set<T> supportedValues;
   private final List<T> foundValues;

   @Override
   public String getMessage() {
      return "Incompatible configuration '"
         + this.configuration.getName()
         + "':\nAt least one found value must be supported\nSupported values: "
         + this.getSupportedValuesString()
         + "\nFound values: "
         + this.getFoundValuesAsString();
   }

   private String getFoundValuesAsString() {
      return this.foundValues.isEmpty() ? "-" : this.foundValues.stream().map(Objects::toString).collect(Collectors.joining(",", "[", "]"));
   }

   private String getSupportedValuesString() {
      return this.supportedValues.stream().map(Objects::toString).collect(Collectors.joining(",", "[", "]"));
   }

   @SuppressFBWarnings(justification = "generated code")
   public OpenIDConnectIncompatibilityNoneFoundValuesSupported(OpenIDConnectConfiguration configuration, Set<T> supportedValues, List<T> foundValues) {
      this.configuration = configuration;
      this.supportedValues = supportedValues;
      this.foundValues = foundValues;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public OpenIDConnectConfiguration getConfiguration() {
      return this.configuration;
   }
}
