// AUTO-GENERATED from manifest.json — do not edit by hand.
// Regenerate with: yarn workspace @lifi/composer-sdk generate

import type {
  MaterialiserConfigOf,
  MaterialiserInput,
} from '@lifi/compose-spec';

import type {
  BalanceOfMaterialiserConfig as BalanceOfMaterialiserConfigSchema,
  CallMaterialiserConfig as CallMaterialiserConfigSchema,
  DirectDepositMaterialiserConfig as DirectDepositMaterialiserConfigSchema,
} from './config.generated.js';

export type BalanceOfMaterialiserConfig =
  MaterialiserConfigOf<BalanceOfMaterialiserConfigSchema>;

/** Read the on-chain token balance of an address as the input amount — accepts: resource */
export const balanceOf = (
  config: BalanceOfMaterialiserConfig,
): MaterialiserInput => ({
  kind: 'balanceOf',
  ...config,
});

export type DirectDepositMaterialiserConfig =
  MaterialiserConfigOf<DirectDepositMaterialiserConfigSchema>;

/** Deposit tokens into the VM — native via msg.value, ERC-20 via transferFrom — accepts: resource */
export const directDeposit = (
  config: DirectDepositMaterialiserConfig,
): MaterialiserInput => ({
  kind: 'directDeposit',
  ...config,
});

export type CallMaterialiserConfig =
  MaterialiserConfigOf<CallMaterialiserConfigSchema>;

/** Execute an arbitrary contract call and measure the resulting token balance diff — accepts: resource */
export const call = (config: CallMaterialiserConfig): MaterialiserInput => ({
  kind: 'call',
  ...config,
});
