package com.airlock.iam.oauth2.domain.service.clientauthentication.clientsecret;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.oauth2.api.domain.model.clientauthentication.ClientAuthenticationMethod;
import com.airlock.iam.oauth2.api.domain.model.http.OAuth2HttpRequest;
import com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ParameterClientSecretMethodConfig;
import com.airlock.iam.oauth2.domain.model.clientauthentication.method.KnownClientAuthenticationMethod;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;

@LogicForConfig(OAuth2ParameterClientSecretMethodConfig.class)
public final class OAuth2ParameterClientSecretMethod implements OAuth2ClientSecretMethod {
   private final Provider<OAuth2ParameterClientSecretMethodSettings> settings;

   @Inject
   public OAuth2ParameterClientSecretMethod(Provider<OAuth2ParameterClientSecretMethodSettings> settings) {
      this.settings = settings;
   }

   @Override
   public Optional<String> getClientIdFromRequest(OAuth2HttpRequest request) {
      return request.getParameter(((OAuth2ParameterClientSecretMethodSettings)this.settings.get()).clientIdName()).filter(StringUtils::isNotBlank);
   }

   @Override
   public Optional<String> getClientSecretFromRequest(OAuth2HttpRequest request) {
      return request.getParameter(((OAuth2ParameterClientSecretMethodSettings)this.settings.get()).parameterName()).filter(StringUtils::isNotBlank);
   }

   @Override
   public ClientAuthenticationMethod clientAuthenticationMethod() {
      return KnownClientAuthenticationMethod.POST_PARAMETERS_CLIENT_SECRET;
   }
}
