Skip to main content

lib/mercadopago/disbursement_refund.ex

defmodule Mercadopago.DisbursementRefund do
  @moduledoc "Refunds on individual disbursements within an advanced payment (marketplace split)."

  alias Mercadopago.{Client, HTTP}

  @doc "Lists refunds for the given advanced payment."
  @spec list(Client.t(), String.t(), keyword()) :: HTTP.response()
  def list(%Client{} = client, advanced_payment_id, opts \\ []) do
    HTTP.get(client, "/v1/advanced_payments/#{advanced_payment_id}/refunds", nil, opts)
  end

  @doc "Refunds every disbursement of the given advanced payment."
  @spec create_all(Client.t(), String.t(), keyword()) :: HTTP.response()
  def create_all(%Client{} = client, advanced_payment_id, opts \\ []) do
    HTTP.post(client, "/v1/advanced_payments/#{advanced_payment_id}/refunds", nil, opts)
  end

  @doc "Refunds a single disbursement; pass `amount` for a partial refund."
  @spec create(Client.t(), String.t(), String.t(), number() | nil, keyword()) :: HTTP.response()
  def create(%Client{} = client, advanced_payment_id, disbursement_id, amount \\ nil, opts \\ []) do
    body = if amount, do: %{amount: amount}, else: nil

    HTTP.post(
      client,
      "/v1/advanced_payments/#{advanced_payment_id}/disbursements/#{disbursement_id}/refunds",
      body,
      opts
    )
  end
end