/**
 * 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 { faker } from "@faker-js/faker";

import { HttpResponse, delay, http } from "msw";

import type { ListSolanaTokenBalances200 } from "../coinbaseDeveloperPlatformAPIs.schemas.js";

export const getListSolanaTokenBalancesResponseMock = (): ListSolanaTokenBalances200 => ({
  ...{
    balances: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
      () => ({
        amount: {
          amount: faker.helpers.fromRegExp("^[0-9]+$"),
          decimals: faker.number.int({ min: undefined, max: undefined }),
        },
        token: {
          symbol: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
          name: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
          mintAddress: faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$"),
        },
      }),
    ),
  },
  ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
});

export const getListSolanaTokenBalancesMockHandler = (
  overrideResponse?:
    | ListSolanaTokenBalances200
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<ListSolanaTokenBalances200> | ListSolanaTokenBalances200),
) => {
  return http.get("*/v2/solana/token-balances/:network/:address", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getListSolanaTokenBalancesResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};
export const getSolanaTokenBalancesMock = () => [getListSolanaTokenBalancesMockHandler()];
