import * as _betswirl_sdk_core from '@betswirl/sdk-core';
import { BetSwirlClient, BetSwirlClientOptions, CasinoPlacedBet, CasinoWaitRollOptions, CasinoRolledBet, CoinTossParams, CasinoPlaceBetOptions, PlaceBetCallbacks, CasinoChainId, CoinTossPlacedBet, CoinTossRolledBet, DiceParams, DicePlacedBet, DiceRolledBet, RouletteParams, RoulettePlacedBet, RouletteRolledBet, CasinoToken, CASINO_GAME_TYPE, CasinoGameToken, Token, BetRequirements, GAS_PRICE_TYPE, KenoConfiguration, ChainId, BetSwirlWallet, BetSwirlFunctionData, BetSwirlEventData } from '@betswirl/sdk-core';
import { Config } from '@wagmi/core';
import * as viem from 'viem';
import { TransactionReceipt, Hex, PublicClient, Abi, CallReturnType, Hash } from 'viem';

declare class WagmiBetSwirlClient extends BetSwirlClient {
    wagmiConfig: Config;
    constructor(wagmiConfig: Config, betSwirlDefaultOptions?: BetSwirlClientOptions);
    waitRolledBet(placedBet: CasinoPlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: CasinoRolledBet;
        receipt: TransactionReceipt;
    }>;
    playCoinToss(params: CoinTossParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: CoinTossPlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitCoinToss(placedBet: CoinTossPlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: CoinTossRolledBet;
        receipt: TransactionReceipt;
    }>;
    playDice(params: DiceParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: DicePlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitDice(placedBet: DicePlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: DiceRolledBet;
        receipt: TransactionReceipt;
    }>;
    playRoulette(params: RouletteParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: RoulettePlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitRoulette(placedBet: RoulettePlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: RouletteRolledBet;
        receipt: TransactionReceipt;
    }>;
    getCasinoGames(onlyActive?: boolean, chainId?: CasinoChainId): Promise<_betswirl_sdk_core.CasinoGame[]>;
    getCasinoTokens(onlyActive?: boolean, chainId?: CasinoChainId): Promise<CasinoToken[]>;
    getCasinoGameToken(casinoToken: CasinoToken, game: CASINO_GAME_TYPE, affiliate?: Hex): Promise<CasinoGameToken>;
    getBetRequirements(token: Token, multiplier: number, game: CASINO_GAME_TYPE, chainId?: CasinoChainId): Promise<BetRequirements>;
    getChainlinkVrfCost(game: CASINO_GAME_TYPE, tokenAddress: Hex, betCount: number, gasPrice?: bigint, gasPriceType?: GAS_PRICE_TYPE, chainId?: CasinoChainId): Promise<bigint>;
    getKenoConfiguration(token: Token, chainId?: CasinoChainId): Promise<KenoConfiguration>;
    _switchChain(chainId?: ChainId): Promise<void>;
    static init(wagmiConfig: Config, options?: BetSwirlClientOptions): WagmiBetSwirlClient;
}
declare function initWagmiBetSwirlClient(wagmiConfig: Config, options?: BetSwirlClientOptions): WagmiBetSwirlClient;

declare class WagmiBetSwirlWallet extends BetSwirlWallet {
    private wagmiConfig;
    constructor(wagmiConfig: Config);
    getChainId(): number;
    getAccount(chainId?: number): viem.Account | undefined;
    getPublicClient(chainId?: number): PublicClient;
    readContract<TFunctionData extends BetSwirlFunctionData<Abi, string, readonly any[]>>(functionData: TFunctionData, gasPrice: bigint): Promise<CallReturnType>;
    readContract<TFunctionData extends BetSwirlFunctionData<Abi, string, readonly any[]>, TReturnType = any>(functionData: TFunctionData, gasPrice?: undefined): Promise<TReturnType>;
    readContracts<TFunctionDatas extends BetSwirlFunctionData<Abi, string, readonly any[]>[], TReturnTypes extends any[]>(functionDatas: [...TFunctionDatas]): Promise<TReturnTypes>;
    getTransactionReceipt(txHash: Hash): Promise<TransactionReceipt>;
    watchContractEvent<TEventData extends BetSwirlEventData<Abi, string, any>>(eventData: TEventData): () => void;
    writeContract<TFunctionData extends BetSwirlFunctionData<Abi, string, readonly any[]>>(functionData: TFunctionData, value?: bigint, gasPrice?: bigint): Promise<Hash>;
    waitTransaction(txHash: Hash, pollingInterval?: number): Promise<TransactionReceipt>;
}

export { WagmiBetSwirlClient, WagmiBetSwirlWallet, initWagmiBetSwirlClient };
