/**
 * Generated by orval v7.6.0 🍺
 * Do not edit manually.
 * Coinbase Developer Platform APIs
 * The Coinbase Developer Platform APIs - leading the world's transition onchain.
 * OpenAPI spec version: 2.0.0
 */
import type {
  CreatePaymentTransferQuote201,
  CreatePaymentTransferQuoteBody,
  CryptoRail,
  GetCryptoRailsParams,
  PaymentMethod,
  Transfer,
} from "../coinbaseDeveloperPlatformAPIs.schemas.js";

import { cdpApiClient } from "../../cdpApiClient.js";

type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];

/**
 * Gets the fiat payment methods that can be used to send funds or receive funds. This is the list of payment methods configured for your account.
 * @summary Get the fiat payment methods
 */
export const getPaymentMethods = (options?: SecondParameter<typeof cdpApiClient>) => {
  return cdpApiClient<PaymentMethod[]>(
    { url: `/v2/payments/rails/payment-methods`, method: "GET" },
    options,
  );
};
/**
 * Gets the crypto rails that can be used to send funds or receive funds.
 * @summary Get the crypto rails
 */
export const getCryptoRails = (
  params?: GetCryptoRailsParams,
  options?: SecondParameter<typeof cdpApiClient>,
) => {
  return cdpApiClient<CryptoRail[]>(
    { url: `/v2/payments/rails/crypto`, method: "GET", params },
    options,
  );
};
/**
 * Creates a new transfer quote, which can then be executed using the Execute a transfer quote endpoint. If you want to automatically execute the transfer without needing to confirm, specify execute as true.
 * @summary Create a transfer quote
 */
export const createPaymentTransferQuote = (
  createPaymentTransferQuoteBody: CreatePaymentTransferQuoteBody,
  options?: SecondParameter<typeof cdpApiClient>,
) => {
  return cdpApiClient<CreatePaymentTransferQuote201>(
    {
      url: `/v2/payments/transfers`,
      method: "POST",
      headers: { "Content-Type": "application/json" },
      data: createPaymentTransferQuoteBody,
    },
    options,
  );
};
/**
 * Executes a transfer quote which was created using the Create a transfer quote endpoint.
 * @summary Execute a transfer quote
 */
export const executePaymentTransferQuote = (
  transferId: string,
  options?: SecondParameter<typeof cdpApiClient>,
) => {
  return cdpApiClient<Transfer>(
    { url: `/v2/payments/transfers/${transferId}/execute`, method: "POST" },
    options,
  );
};
/**
 * Gets a transfer by ID.
 * @summary Get a transfer by ID
 */
export const getPaymentTransfer = (
  transferId: string,
  options?: SecondParameter<typeof cdpApiClient>,
) => {
  return cdpApiClient<Transfer>(
    { url: `/v2/payments/transfers/${transferId}`, method: "GET" },
    options,
  );
};
export type GetPaymentMethodsResult = NonNullable<Awaited<ReturnType<typeof getPaymentMethods>>>;
export type GetCryptoRailsResult = NonNullable<Awaited<ReturnType<typeof getCryptoRails>>>;
export type CreatePaymentTransferQuoteResult = NonNullable<
  Awaited<ReturnType<typeof createPaymentTransferQuote>>
>;
export type ExecutePaymentTransferQuoteResult = NonNullable<
  Awaited<ReturnType<typeof executePaymentTransferQuote>>
>;
export type GetPaymentTransferResult = NonNullable<Awaited<ReturnType<typeof getPaymentTransfer>>>;
