package com.airlock.iam.oauth2.domain.model.client;

import com.airlock.iam.core.domain.model.http.HttpRequest;
import com.airlock.iam.core.domain.model.http.HttpRequestBody;
import com.airlock.iam.core.domain.model.http.HttpRequestHeader;
import com.airlock.iam.core.domain.model.http.HttpRequestHeaders;
import com.airlock.iam.core.domain.model.http.HttpRequestMethod;
import com.airlock.iam.core.domain.model.http.HttpRequestParameter;
import com.airlock.iam.core.domain.model.http.HttpRequestUri;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;

public class OAuth2PostRequestBuilder implements OAuth2RequestBuilder {
   @Override
   public HttpRequest buildRequestWithParams(URI uri, List<HttpRequestParameter> params, List<HttpRequestHeader> headers) {
      HttpRequestHeader contentType = HttpRequestHeader.httpRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      HttpRequestBody httpRequestBody = HttpRequestBody.httpRequestBody(
         params.stream().map(HttpRequestParameter::urlEncoded).collect(Collectors.joining("&")).getBytes(StandardCharsets.UTF_8)
      );
      return HttpRequest.builder()
         .uri(HttpRequestUri.httpRequestUri(uri.toString()))
         .method(HttpRequestMethod.POST)
         .body(httpRequestBody)
         .headers(HttpRequestHeaders.httpRequestHeaders(headers).withSetHeader(contentType))
         .build();
   }
}
