/**
 * 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 { ListEvmTokenBalancesNetwork } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
import type { ListEvmTokenBalances200 } from "../coinbaseDeveloperPlatformAPIs.schemas.js";

export const getListEvmTokenBalancesResponseMock = (): ListEvmTokenBalances200 => ({
  ...{
    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: {
          network: faker.helpers.arrayElement(Object.values(ListEvmTokenBalancesNetwork)),
          symbol: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
          name: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
          contractAddress: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
        },
      }),
    ),
  },
  ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
});

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

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