"use client";
import {
  AMOUNT_PLACEHOLDER,
  COLLATERAL_ONRAMP_ABI,
  COLLATERAL_ONRAMP_ADDRESS,
  POLYGON_USDCE,
  PUSD_TOKEN,
  VAULT_DEPOSITOR_ABI,
  VAULT_DEPOSITOR_POLYGON,
  createPerpsGenerateActionParams
} from "./chunk-MOUTRRN3.js";

// src/clients/polymarket/createPolymarketDepositConfig.ts
import { encodeFunctionData, erc20Abi, maxUint256 } from "viem";
import { polygon } from "viem/chains";
var POLYMARKET_PREDICTIONS_ROUTING_ID = "POLYMARKET_PREDICTIONS";
var POLYMARKET_PERPS_ROUTING_ID = "POLYMARKET_PERPS";
function createPredictionsGenerateActionParams(config) {
  const { recipientAddress } = config;
  return async () => {
    const wrapUsdceToPusd = encodeFunctionData({
      abi: COLLATERAL_ONRAMP_ABI,
      functionName: "wrap",
      args: [POLYGON_USDCE, recipientAddress, AMOUNT_PLACEHOLDER]
    });
    return [
      // Approve USDC.e to the VaultDepositor (infinite).
      {
        contractAbi: erc20Abi,
        contractAddress: POLYGON_USDCE,
        functionName: "approve",
        functionArgs: [VAULT_DEPOSITOR_POLYGON, maxUint256]
      },
      // VaultDepositor pulls the USDC.e and forwards to CollateralOnramp.wrap,
      // minting pUSD to the predictions proxy.
      {
        contractAbi: VAULT_DEPOSITOR_ABI,
        contractAddress: VAULT_DEPOSITOR_POLYGON,
        functionName: "deposit",
        functionArgs: [
          POLYGON_USDCE,
          COLLATERAL_ONRAMP_ADDRESS,
          wrapUsdceToPusd,
          0n
        ]
      }
    ];
  };
}
var PERPS_MIN_DEPOSIT_USD = 10;
function createPolymarketDepositConfig({
  predictions,
  perps,
  modalTitleMeta,
  modalTitles,
  defaultAccount = "predictions"
}) {
  const isPerpsRoute = (routingId) => routingId === POLYMARKET_PERPS_ROUTING_ID;
  const defaultsToPerps = defaultAccount === "perps";
  return {
    targetChain: polygon.id.toString(),
    targetAsset: POLYGON_USDCE,
    targetAssetAmount: 0,
    targetAssetTicker: PUSD_TOKEN.symbol,
    checkoutItemTitle: PUSD_TOKEN.symbol,
    iconSrc: PUSD_TOKEN.iconSrc,
    modalTitleMeta,
    // The preselected destination (the "Deposit to" dropdown derives its
    // selection from `dynamicRoutingId`, so both fields must agree).
    dynamicRoutingId: defaultsToPerps ? POLYMARKET_PERPS_ROUTING_ID : POLYMARKET_PREDICTIONS_ROUTING_ID,
    customRecipient: defaultsToPerps ? perps.address : predictions.address,
    modalTitle: ({ dynamicRoutingId }) => isPerpsRoute(dynamicRoutingId) ? modalTitles?.perps ?? "Deposit (Perps)" : modalTitles?.predictions ?? "Deposit (Predictions)",
    getMinDepositUSD: ({ dynamicRoutingId }) => isPerpsRoute(dynamicRoutingId) ? PERPS_MIN_DEPOSIT_USD : 0,
    generateActionsParams: (_targetAssetAmount, outputConfig) => isPerpsRoute(
      outputConfig?.dynamicRoutingId
    ) ? createPerpsGenerateActionParams({ recipientAddress: perps.address })() : createPredictionsGenerateActionParams({
      recipientAddress: predictions.address
    })(),
    // Both transfer directions are integrator-owned; the step picks the source
    // account's transfer. The accounts already have exactly the handle shape
    // the step consumes, so they pass through as-is.
    polymarketPerpsTransfer: {
      predictions,
      perps
    }
  };
}

export {
  POLYMARKET_PREDICTIONS_ROUTING_ID,
  POLYMARKET_PERPS_ROUTING_ID,
  createPredictionsGenerateActionParams,
  createPolymarketDepositConfig
};
