import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common.js";
export declare namespace StakeNFT {
    type StakingStruct = {
        staker: string;
        token: string;
        tokenId: BigNumberish;
        releaseTime: BigNumberish;
        status: BigNumberish;
    };
    type StakingStructOutput = [
        string,
        string,
        BigNumber,
        BigNumber,
        number
    ] & {
        staker: string;
        token: string;
        tokenId: BigNumber;
        releaseTime: BigNumber;
        status: number;
    };
}
export interface PlutoallianceStakingInterface extends utils.Interface {
    functions: {
        "callStakeToken(address,uint256)": FunctionFragment;
        "cancelMultiStakes(uint256[])": FunctionFragment;
        "checkStake(uint256,address)": FunctionFragment;
        "getStakedTokens(address)": FunctionFragment;
        "multiStakeToken(address,uint256[])": FunctionFragment;
        "viewStake(uint256)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "callStakeToken" | "cancelMultiStakes" | "checkStake" | "getStakedTokens" | "multiStakeToken" | "viewStake"): FunctionFragment;
    encodeFunctionData(functionFragment: "callStakeToken", values: [string, BigNumberish]): string;
    encodeFunctionData(functionFragment: "cancelMultiStakes", values: [BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "checkStake", values: [BigNumberish, string]): string;
    encodeFunctionData(functionFragment: "getStakedTokens", values: [string]): string;
    encodeFunctionData(functionFragment: "multiStakeToken", values: [string, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "viewStake", values: [BigNumberish]): string;
    decodeFunctionResult(functionFragment: "callStakeToken", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cancelMultiStakes", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "checkStake", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStakedTokens", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "multiStakeToken", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "viewStake", data: BytesLike): Result;
    events: {
        "tokenCancelComplete(address,uint256,uint8)": EventFragment;
        "tokenClaimStatus(address,uint256,uint8)": EventFragment;
        "tokenStaked(address,address,uint256,uint8)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "tokenCancelComplete"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "tokenClaimStatus"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "tokenStaked"): EventFragment;
}
export interface tokenCancelCompleteEventObject {
    token: string;
    token_id: BigNumber;
    status: number;
}
export type tokenCancelCompleteEvent = TypedEvent<[
    string,
    BigNumber,
    number
], tokenCancelCompleteEventObject>;
export type tokenCancelCompleteEventFilter = TypedEventFilter<tokenCancelCompleteEvent>;
export interface tokenClaimStatusEventObject {
    token: string;
    token_id: BigNumber;
    status: number;
}
export type tokenClaimStatusEvent = TypedEvent<[
    string,
    BigNumber,
    number
], tokenClaimStatusEventObject>;
export type tokenClaimStatusEventFilter = TypedEventFilter<tokenClaimStatusEvent>;
export interface tokenStakedEventObject {
    staker: string;
    token: string;
    token_id: BigNumber;
    status: number;
}
export type tokenStakedEvent = TypedEvent<[
    string,
    string,
    BigNumber,
    number
], tokenStakedEventObject>;
export type tokenStakedEventFilter = TypedEventFilter<tokenStakedEvent>;
export interface PlutoallianceStaking extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PlutoallianceStakingInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        callStakeToken(token: string, _tokenID: BigNumberish, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        cancelMultiStakes(tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        checkStake(tokenId: BigNumberish, staker: string, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        getStakedTokens(_wallet: string, overrides?: CallOverrides): Promise<[BigNumber[]]>;
        multiStakeToken(token: string, _tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        viewStake(tokenId: BigNumberish, overrides?: CallOverrides): Promise<[StakeNFT.StakingStructOutput]>;
    };
    callStakeToken(token: string, _tokenID: BigNumberish, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    cancelMultiStakes(tokenIds: BigNumberish[], overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    checkStake(tokenId: BigNumberish, staker: string, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    getStakedTokens(_wallet: string, overrides?: CallOverrides): Promise<BigNumber[]>;
    multiStakeToken(token: string, _tokenIds: BigNumberish[], overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    viewStake(tokenId: BigNumberish, overrides?: CallOverrides): Promise<StakeNFT.StakingStructOutput>;
    callStatic: {
        callStakeToken(token: string, _tokenID: BigNumberish, overrides?: CallOverrides): Promise<void>;
        cancelMultiStakes(tokenIds: BigNumberish[], overrides?: CallOverrides): Promise<void>;
        checkStake(tokenId: BigNumberish, staker: string, overrides?: CallOverrides): Promise<StakeNFT.StakingStructOutput>;
        getStakedTokens(_wallet: string, overrides?: CallOverrides): Promise<BigNumber[]>;
        multiStakeToken(token: string, _tokenIds: BigNumberish[], overrides?: CallOverrides): Promise<void>;
        viewStake(tokenId: BigNumberish, overrides?: CallOverrides): Promise<StakeNFT.StakingStructOutput>;
    };
    filters: {
        "tokenCancelComplete(address,uint256,uint8)"(token?: string | null, token_id?: BigNumberish | null, status?: BigNumberish | null): tokenCancelCompleteEventFilter;
        tokenCancelComplete(token?: string | null, token_id?: BigNumberish | null, status?: BigNumberish | null): tokenCancelCompleteEventFilter;
        "tokenClaimStatus(address,uint256,uint8)"(token?: string | null, token_id?: BigNumberish | null, status?: BigNumberish | null): tokenClaimStatusEventFilter;
        tokenClaimStatus(token?: string | null, token_id?: BigNumberish | null, status?: BigNumberish | null): tokenClaimStatusEventFilter;
        "tokenStaked(address,address,uint256,uint8)"(staker?: string | null, token?: string | null, token_id?: null, status?: null): tokenStakedEventFilter;
        tokenStaked(staker?: string | null, token?: string | null, token_id?: null, status?: null): tokenStakedEventFilter;
    };
    estimateGas: {
        callStakeToken(token: string, _tokenID: BigNumberish, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        cancelMultiStakes(tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        checkStake(tokenId: BigNumberish, staker: string, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        getStakedTokens(_wallet: string, overrides?: CallOverrides): Promise<BigNumber>;
        multiStakeToken(token: string, _tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        viewStake(tokenId: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        callStakeToken(token: string, _tokenID: BigNumberish, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        cancelMultiStakes(tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        checkStake(tokenId: BigNumberish, staker: string, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        getStakedTokens(_wallet: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        multiStakeToken(token: string, _tokenIds: BigNumberish[], overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        viewStake(tokenId: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
