/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
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 {
  export type StakingStruct = {
    staker: string;
    token: string;
    tokenId: BigNumberish;
    releaseTime: BigNumberish;
    status: BigNumberish;
  };

  export 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>;
  };
}
