package ru.ibs.socrates.confexporter.external.access.api;

import java.util.Map;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import ru.ibs.socrates.confexporter.external.access.config.AccessClientConfig;
import ru.ibs.socrates.confexporter.external.access.dto.AccessResponseDto;


/**
 * Feign клиент API ЕПА.
 */
@FeignClient(
    name = "accessApiClient",
    url = "${integrations.sdt-access.url}",
    configuration = AccessClientConfig.class)
public interface AccessApiClient extends AccessApi {

  /**
   * Запрос на получение токена.
   *
   * @param tokenRequest запрос с идентификацией клиента.
   *    <p>grant_type = client_credentials/authorization_code
   *    <p>client_id
   *    <p>client_secret
   * @return ответ с токеном
   */
  @PostMapping(
      value = "/protocol/openid-connect/token",
      consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
  ResponseEntity<AccessResponseDto> getToken(Map<String, ?> tokenRequest);

}
