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

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.nimbusds.oauth2.sdk.ResponseMode;
import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
import java.util.List;
import java.util.Set;

public final class OpenIDConnectConfigurationResponseModes implements OpenIDConnectConfiguration {
   static final String RESPONSE_MODES_CONFIGURATION_NAME = "response modes";
   private static final Set<ResponseMode> COMPATIBLE_RESPONSE_MODES = ImmutableSet.of(ResponseMode.QUERY);

   @Override
   public String getName() {
      return "response modes";
   }

   @Override
   public OpenIDConnectCompatibilityResult validate(OIDCProviderMetadata providerMetadata) {
      List<ResponseMode> responseModes = providerMetadata.getResponseModes();
      Set<ResponseMode> intersection = Sets.intersection(COMPATIBLE_RESPONSE_MODES, Sets.newHashSet(responseModes));
      return intersection.isEmpty()
         ? OpenIDConnectCompatibilityResult.withIncompatibility(
            new OpenIDConnectIncompatibilityNoneFoundValuesSupported<>(this, COMPATIBLE_RESPONSE_MODES, responseModes)
         )
         : OpenIDConnectCompatibilityResult.SUCCESS;
   }
}
