package com.airlock.iam.oauth2.infrastructure.service.clientauthentication;

import com.airlock.iam.oauth2.api.domain.model.http.OAuth2HttpRequest;
import com.airlock.iam.oauth2.api.domain.service.clientauthentication.OAuth2ClientAuthenticationParser;
import com.airlock.iam.oauth2.domain.model.OAuth2Param;
import com.airlock.iam.oauth2.domain.model.clientauthentication.OpenIdConnectPrivateKeyJwtAuthenticationPayload;
import java.util.Optional;

public class OpenIdConnectPrivateKeyJwtAuthenticationParser implements OAuth2ClientAuthenticationParser<OpenIdConnectPrivateKeyJwtAuthenticationPayload> {
   @Override
   public Optional<OpenIdConnectPrivateKeyJwtAuthenticationPayload> parse(OAuth2HttpRequest request) {
      Optional<String> assertionType = request.getParameter(OAuth2Param.CLIENT_ASSERTION_TYPE.getParameterName());
      Optional<String> assertion = request.getParameter(OAuth2Param.CLIENT_ASSERTION.getParameterName());
      Optional<String> clientId = request.getParameter(OAuth2Param.CLIENT_ID.getParameterName());
      return !assertionType.isEmpty() && !assertion.isEmpty()
         ? Optional.of(
            OpenIdConnectPrivateKeyJwtAuthenticationPayload.builder()
               .assertionType(assertionType.get())
               .assertion(assertion.get())
               .clientIdFromRequest(clientId)
               .build()
         )
         : Optional.empty();
   }
}
