/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import BN from "bn.js";
import { ContractOptions } from "web3-eth-contract";
import { EventLog } from "web3-core";
import { EventEmitter } from "events";
import {
  Callback,
  PayableTransactionObject,
  NonPayableTransactionObject,
  BlockType,
  ContractEventLog,
  BaseContract,
} from "./types";

interface EventOptions {
  filter?: object;
  fromBlock?: BlockType;
  topics?: string[];
}

export type Approval = ContractEventLog<{
  owner: string;
  spender: string;
  value: string;
  0: string;
  1: string;
  2: string;
}>;
export type NewTimeLock = ContractEventLog<{
  _account: string;
  _timelock: [string, string, string];
  0: string;
  1: [string, string, string];
}>;
export type Purged = ContractEventLog<{
  _account: string;
  _timelock: [string, string, string];
  0: string;
  1: [string, string, string];
}>;
export type Transfer_address_address_uint256_bytes = ContractEventLog<{
  from: string;
  to: string;
  value: string;
  data: string;
  0: string;
  1: string;
  2: string;
  3: string;
}>;
export type Transfer_address_address_uint256 = ContractEventLog<{
  from: string;
  to: string;
  value: string;
  0: string;
  1: string;
  2: string;
}>;
export type UserDeposited = ContractEventLog<{
  _user: string;
  _newDepositAmount: string;
  _newBalance: string;
  0: string;
  1: string;
  2: string;
}>;
export type UserWithdrawn = ContractEventLog<{
  _user: string;
  _withdrawnAmount: string;
  _newBalance: string;
  0: string;
  1: string;
  2: string;
}>;

export interface QVaultMock extends BaseContract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  ): QVaultMock;
  clone(): QVaultMock;
  methods: {
    aggregatedNormalizedBalance(): NonPayableTransactionObject<string>;

    allowance(
      tokenOwner: string,
      spender: string
    ): NonPayableTransactionObject<string>;

    announceUnlock(
      _amount: number | string | BN
    ): NonPayableTransactionObject<void>;

    approve(
      spender: string,
      amount: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    balanceOf(_userAddress: string): NonPayableTransactionObject<string>;

    claimStakeDelegatorReward(): NonPayableTransactionObject<boolean>;

    compoundRateKeeper(): NonPayableTransactionObject<string>;

    decimals(): NonPayableTransactionObject<string>;

    decreaseAllowance(
      spender: string,
      subtractedValue: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    delegateStake(
      _delegatedTo: string[],
      _stakes: (number | string | BN)[]
    ): NonPayableTransactionObject<void>;

    deposit(): PayableTransactionObject<boolean>;

    depositFromPool(): PayableTransactionObject<void>;

    depositOnBehalfOf(
      _account: string,
      _releaseStart: number | string | BN,
      _releaseEnd: number | string | BN
    ): PayableTransactionObject<void>;

    depositTo(_recipient: string): PayableTransactionObject<boolean>;

    getBalanceDetails(): NonPayableTransactionObject<
      [string, string, string, string, string]
    >;

    getDelegationsList(
      _delegator: string
    ): NonPayableTransactionObject<
      [string, string, string, string, string, string, string][]
    >;

    getLockInfo(): NonPayableTransactionObject<
      [string, string, string, string]
    >;

    getMinimumBalance(
      _account: string,
      _timestamp: number | string | BN
    ): NonPayableTransactionObject<string>;

    getNormalizedBalance(
      _userAddress: string
    ): NonPayableTransactionObject<string>;

    getTimeLocks(
      _account: string
    ): NonPayableTransactionObject<[string, string, string][]>;

    getUserBalance(_userAddress: string): NonPayableTransactionObject<string>;

    increaseAllowance(
      spender: string,
      addedValue: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    initialize(_registry: string): NonPayableTransactionObject<void>;

    lock(_amount: number | string | BN): NonPayableTransactionObject<void>;

    name(): NonPayableTransactionObject<string>;

    purgeTimeLocks(_account: string): NonPayableTransactionObject<void>;

    symbol(): NonPayableTransactionObject<string>;

    totalSupply(): NonPayableTransactionObject<string>;

    transfer(
      receiver: string,
      amount: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    transferAndCall(
      _to: string,
      _value: number | string | BN,
      _data: string | number[]
    ): NonPayableTransactionObject<boolean>;

    transferFrom(
      owner: string,
      receiver: string,
      amount: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    unlock(_amount: number | string | BN): NonPayableTransactionObject<void>;

    updateCompoundRate(): NonPayableTransactionObject<string>;

    withdraw(
      _amount: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    withdrawTo(
      _recipient: string,
      _amount: number | string | BN
    ): NonPayableTransactionObject<boolean>;

    testListOfDelegatedTo(
      _delegator: string
    ): NonPayableTransactionObject<string[]>;

    testTotalDelegatedStake(
      _delegator: string
    ): NonPayableTransactionObject<string>;

    testValidatorsActualStakes(
      _delegator: string,
      _validator: string
    ): NonPayableTransactionObject<string>;

    testValidatorsNormalizedStakes(
      _delegator: string,
      _validator: string
    ): NonPayableTransactionObject<string>;
  };
  events: {
    Approval(cb?: Callback<Approval>): EventEmitter;
    Approval(options?: EventOptions, cb?: Callback<Approval>): EventEmitter;

    NewTimeLock(cb?: Callback<NewTimeLock>): EventEmitter;
    NewTimeLock(
      options?: EventOptions,
      cb?: Callback<NewTimeLock>
    ): EventEmitter;

    Purged(cb?: Callback<Purged>): EventEmitter;
    Purged(options?: EventOptions, cb?: Callback<Purged>): EventEmitter;

    "Transfer(address,address,uint256,bytes)"(
      cb?: Callback<Transfer_address_address_uint256_bytes>
    ): EventEmitter;
    "Transfer(address,address,uint256,bytes)"(
      options?: EventOptions,
      cb?: Callback<Transfer_address_address_uint256_bytes>
    ): EventEmitter;

    "Transfer(address,address,uint256)"(
      cb?: Callback<Transfer_address_address_uint256>
    ): EventEmitter;
    "Transfer(address,address,uint256)"(
      options?: EventOptions,
      cb?: Callback<Transfer_address_address_uint256>
    ): EventEmitter;

    UserDeposited(cb?: Callback<UserDeposited>): EventEmitter;
    UserDeposited(
      options?: EventOptions,
      cb?: Callback<UserDeposited>
    ): EventEmitter;

    UserWithdrawn(cb?: Callback<UserWithdrawn>): EventEmitter;
    UserWithdrawn(
      options?: EventOptions,
      cb?: Callback<UserWithdrawn>
    ): EventEmitter;

    allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
  };

  once(event: "Approval", cb: Callback<Approval>): void;
  once(event: "Approval", options: EventOptions, cb: Callback<Approval>): void;

  once(event: "NewTimeLock", cb: Callback<NewTimeLock>): void;
  once(
    event: "NewTimeLock",
    options: EventOptions,
    cb: Callback<NewTimeLock>
  ): void;

  once(event: "Purged", cb: Callback<Purged>): void;
  once(event: "Purged", options: EventOptions, cb: Callback<Purged>): void;

  once(event: "UserDeposited", cb: Callback<UserDeposited>): void;
  once(
    event: "UserDeposited",
    options: EventOptions,
    cb: Callback<UserDeposited>
  ): void;

  once(event: "UserWithdrawn", cb: Callback<UserWithdrawn>): void;
  once(
    event: "UserWithdrawn",
    options: EventOptions,
    cb: Callback<UserWithdrawn>
  ): void;
}
