package com.airlock.iam.oauth2.infrastructure.credential;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.oauth2.application.configuration.OAuth2BearerAccessTokenConfig;
import com.airlock.iam.oauth2.domain.model.logging.OAuth2TokenRepresentation;
import com.airlock.iam.oauth2.domain.model.settings.AccessTokenHeaderSettings;
import com.airlock.iam.oauth2.domain.model.token.RawOAuth2Token;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;

@LogicForConfig(OAuth2BearerAccessTokenConfig.class)
public final class OAuth2BearerAccessTokenExtraction implements OAuth2AccessTokenExtractionService {
   private final OAuth2AccessTokenExtractionServiceImpl service;

   @Inject
   public OAuth2BearerAccessTokenExtraction(OAuth2TokenRepresentation tokenRepresentation) {
      this.service = new OAuth2AccessTokenExtractionServiceImpl(
         Optional.of(new AccessTokenHeaderSettings("Authorization", Optional.of("Bearer"), tokenRepresentation))
      );
   }

   @Override
   public Optional<RawOAuth2Token> extractAccessToken(HttpServletRequest request) {
      return this.service.extractAccessToken(request);
   }
}
