import * as _betswirl_sdk_core from '@betswirl/sdk-core';
import { BetSwirlClient, BetSwirlClientOptions, NormalCasinoPlacedBet, CasinoWaitRollOptions, CasinoRolledBet, WeightedCasinoPlacedBet, WeightedGameConfiguration, CoinTossBetParams, CasinoPlaceBetOptions, PlaceBetCallbacks, CasinoChainId, CoinTossPlacedBet, CoinTossFreebetParams, PlaceFreebetCallbacks, CoinTossRolledBet, DiceBetParams, DicePlacedBet, DiceFreebetParams, DiceRolledBet, RouletteBetParams, RoulettePlacedBet, RouletteFreebetParams, RouletteRolledBet, KenoBetParams, KenoPlacedBet, KenoFreebetParams, KenoRolledBet, WheelBetParams, WheelPlacedBet, WheelFreebetParams, WheelRolledBet, PlinkoBetParams, PlinkoPlacedBet, PlinkoFreebetParams, PlinkoRolledBet, WeightedGameBetParams, WeightedGamePlacedBet, WeightedGameFreebetParams, CasinoToken, CASINO_GAME_TYPE, CasinoGameToken, Token, BetRequirements, GAS_PRICE_TYPE, KenoConfiguration, ChainId, Leaderboard, LeaderboardClaimRewardsResult, BetSwirlWallet, BetSwirlFunctionData, BetSwirlExtendedEventData } from '@betswirl/sdk-core';
import { Config } from '@wagmi/core';
import * as viem from 'viem';
import { TransactionReceipt, Hex, Address, Hash, PublicClient, Abi, CallReturnType } from 'viem';

declare class WagmiBetSwirlClient extends BetSwirlClient {
    wagmiConfig: Config;
    constructor(wagmiConfig: Config, betSwirlDefaultOptions?: BetSwirlClientOptions);
    waitRolledBet(placedBet: NormalCasinoPlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: CasinoRolledBet;
        receipt: TransactionReceipt;
    }>;
    waitRolledBet(placedBet: WeightedCasinoPlacedBet, options: CasinoWaitRollOptions | undefined, weightedGameConfiguration: WeightedGameConfiguration, houseEdge: number): Promise<{
        rolledBet: CasinoRolledBet;
        receipt: TransactionReceipt;
    }>;
    playCoinToss(params: CoinTossBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: CoinTossPlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetCoinToss(params: CoinTossFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: CoinTossPlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitCoinToss(placedBet: CoinTossPlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: CoinTossRolledBet;
        receipt: TransactionReceipt;
    }>;
    playDice(params: DiceBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: DicePlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetDice(params: DiceFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: DicePlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitDice(placedBet: DicePlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: DiceRolledBet;
        receipt: TransactionReceipt;
    }>;
    playRoulette(params: RouletteBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: RoulettePlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetRoulette(params: RouletteFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: RoulettePlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitRoulette(placedBet: RoulettePlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: RouletteRolledBet;
        receipt: TransactionReceipt;
    }>;
    playKeno(params: KenoBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: KenoPlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetKeno(params: KenoFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: KenoPlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitKeno(placedBet: KenoPlacedBet, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: KenoRolledBet;
        receipt: TransactionReceipt;
    }>;
    playWheel(params: WheelBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: WheelPlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetWheel(params: WheelFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: WheelPlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitWheel(placedBet: WheelPlacedBet, weightedGameConfiguration: WeightedGameConfiguration, houseEdge: number, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: WheelRolledBet;
        receipt: TransactionReceipt;
    }>;
    playPlinko(params: PlinkoBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: PlinkoPlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetPlinko(params: PlinkoFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: PlinkoPlacedBet;
        receipt: TransactionReceipt;
    }>;
    waitPlinko(placedBet: PlinkoPlacedBet, weightedGameConfiguration: WeightedGameConfiguration, houseEdge: number, options?: CasinoWaitRollOptions): Promise<{
        rolledBet: PlinkoRolledBet;
        receipt: TransactionReceipt;
    }>;
    playWeightedGame(params: WeightedGameBetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceBetCallbacks, chainId?: CasinoChainId): Promise<{
        placedBet: WeightedGamePlacedBet;
        receipt: TransactionReceipt;
    }>;
    playFreebetWeightedGame(params: WeightedGameFreebetParams, options?: CasinoPlaceBetOptions, callbacks?: PlaceFreebetCallbacks): Promise<{
        placedFreebet: PlinkoPlacedBet;
        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 | 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>;
    getWeighedGameConfiguration(configId: number | string, chainId?: CasinoChainId): Promise<WeightedGameConfiguration>;
    getClaimableAmount(leaderboardOnChainId: number | bigint, playerAddress: Address, chainId: ChainId): Promise<bigint>;
    claimLeaderboardRewards(leaderboard: Leaderboard, receiver: Address, onClaimPending?: (tx: Hash, result: LeaderboardClaimRewardsResult) => void | Promise<void>): Promise<{
        receipt: TransactionReceipt;
        result: LeaderboardClaimRewardsResult;
    }>;
    _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 BetSwirlExtendedEventData<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 };
