import { Hex } from 'viem';
import { TransactionCallbackResponse } from '../helpers';
import { LoggerData, LoggerType } from '../logger';
import { MerklyDestUserNetworks, MerklySrcNetworks, MerklySrcUserNetworks } from '../modules/merkly/types';
import { NumberRange, ProxyAgent, ProxyObject, WalletData } from './common';
import { BinanceNetworks, OkxNetworks, SupportedNetworks } from './networks';
import { BaseTokens, BscAvailableSwapTokens } from './tokens';
export type GlobalModuleNames = 'binance-withdraw' | 'okx-withdraw' | 'merkly-refuel' | 'transfer-token' | 'balance-checker';
export type WorkerResponse = Pick<TransactionCallbackResponse, 'status' | 'message'> & {
    logTemplate: LoggerData;
};
export type FindModuleReturnFc = (params: TransformedModuleParams) => Promise<WorkerResponse>;
export type AvailableSwapTokens = BscAvailableSwapTokens;
export type SwapModuleNames = Extract<QsoGlobal.ModuleNames, 'mySwap'>;
export type Tokens = BaseTokens | 'BNB' | 'MATIC' | string;
export interface ExtraModuleParams {
    network?: SupportedNetworks;
    gweiRange?: NumberRange;
    maxGas?: [SupportedNetworks, number];
    useInvitesAutosave?: boolean;
    stopWalletOnError?: boolean;
    destinationNetwork?: string;
    destinationNetworks?: string[];
    contractAddress?: Hex | 'native';
    pairs?: [AvailableSwapTokens, AvailableSwapTokens];
    networkPairs?: [string, string];
    contractPairs?: [Hex, Hex];
    reverse?: boolean;
    slippage?: number;
    tokenToSupply?: Tokens;
    collateral?: 'disable' | 'enable';
    remainSwaps?: SwapModuleNames[];
    tokenToWithdraw?: Tokens;
    binanceWithdrawNetwork?: BinanceNetworks;
    okxWithdrawNetwork?: OkxNetworks;
    okxWithdrawFees?: number;
    minAndMaxAmount?: NumberRange;
    minAmount?: number;
    amount?: number;
    usePercentBalance?: boolean;
    minTokenBalance?: number;
    minNativeBalance?: number;
    expectedBalance?: NumberRange;
    merklyNetworkPairs?: [Exclude<MerklySrcUserNetworks, 'auto'>, MerklyDestUserNetworks];
    merklyAutoNetworks?: MerklySrcNetworks[];
    merklyRandomNetworks?: MerklySrcNetworks[];
    zkEraBridgeAmount?: NumberRange;
    checkZkEraBalance?: boolean;
    maxTxsCount?: NumberRange;
}
export type DefaultModuleConfig = ExtraModuleParams & {
    count: NumberRange;
    indexGroup: number;
    delay?: NumberRange;
};
export type UserModuleConfig = Partial<DefaultModuleConfig> & {
    moduleName: QsoGlobal.ModuleNames;
};
export type ModuleConfig = Required<UserModuleConfig>;
export type GroupedModules = Record<number, ModuleConfig[]>;
export type ModuleParams = ModuleConfig & ExtraModuleParams;
export type DefaultModuleConfigs = Record<QsoGlobal.ModuleNames, DefaultModuleConfig>;
export type TransformedModuleParams = Omit<ModuleParams, 'count'> & {
    moduleIndex: number;
    count: number;
    proxyAgent?: ProxyAgent;
    proxyObject?: ProxyObject;
    isReverse?: boolean;
    logger: LoggerType;
    wallet: WalletData;
    baseNetwork: SupportedNetworks;
    projectName: string;
};
export type TransformedModuleConfig = Omit<ModuleConfig, 'count'> & {
    count: number;
    isReverse?: boolean;
};
