/* 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,
  PromiseOrValue,
} from "./common";

export declare namespace IGovernorMiniBravo {
  export type ProposalStruct = {
    id: PromiseOrValue<BigNumberish>;
    params: PromiseOrValue<BytesLike>;
    forVotes: PromiseOrValue<BigNumberish>;
    open: PromiseOrValue<boolean>;
    timelockExpiry: PromiseOrValue<BigNumberish>;
  };

  export type ProposalStructOutput = [
    BigNumber,
    string,
    BigNumber,
    boolean,
    BigNumber
  ] & {
    id: BigNumber;
    params: string;
    forVotes: BigNumber;
    open: boolean;
    timelockExpiry: BigNumber;
  };
}

export interface IGovernorMiniBravoInterface extends utils.Interface {
  functions: {
    "QUORUM()": FunctionFragment;
    "cancelProposal(uint256)": FunctionFragment;
    "cancelVote(uint256)": FunctionFragment;
    "execute(uint256,bytes)": FunctionFragment;
    "executionTimelock()": FunctionFragment;
    "getLatest(uint256)": FunctionFragment;
    "isExecutable(uint256)": FunctionFragment;
    "queue(uint256,bytes)": FunctionFragment;
    "quorumReached(uint256)": FunctionFragment;
    "totalVotes()": FunctionFragment;
    "votingPower(address)": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "QUORUM"
      | "cancelProposal"
      | "cancelVote"
      | "execute"
      | "executionTimelock"
      | "getLatest"
      | "isExecutable"
      | "queue"
      | "quorumReached"
      | "totalVotes"
      | "votingPower"
  ): FunctionFragment;

  encodeFunctionData(functionFragment: "QUORUM", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "cancelProposal",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "cancelVote",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "execute",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BytesLike>]
  ): string;
  encodeFunctionData(
    functionFragment: "executionTimelock",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getLatest",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "isExecutable",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "queue",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BytesLike>]
  ): string;
  encodeFunctionData(
    functionFragment: "quorumReached",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "totalVotes",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "votingPower",
    values: [PromiseOrValue<string>]
  ): string;

  decodeFunctionResult(functionFragment: "QUORUM", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "cancelProposal",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "cancelVote", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "executionTimelock",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getLatest", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isExecutable",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "quorumReached",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "totalVotes", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "votingPower",
    data: BytesLike
  ): Result;

  events: {
    "NewProposal(uint256,uint256,bytes)": EventFragment;
    "NewVote(address,uint256,uint256,uint256)": EventFragment;
    "ProposalCancelled(uint256,uint256,bytes)": EventFragment;
    "ProposalExecuted(uint256,uint256,bytes)": EventFragment;
    "ProposalQueued(uint256,uint256,bytes)": EventFragment;
    "VoteCancelled(address,uint256,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "NewProposal"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "NewVote"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ProposalCancelled"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "VoteCancelled"): EventFragment;
}

export interface NewProposalEventObject {
  _id: BigNumber;
  _method: BigNumber;
  _params: string;
}
export type NewProposalEvent = TypedEvent<
  [BigNumber, BigNumber, string],
  NewProposalEventObject
>;

export type NewProposalEventFilter = TypedEventFilter<NewProposalEvent>;

export interface NewVoteEventObject {
  _voter: string;
  _votes: BigNumber;
  _method: BigNumber;
  _id: BigNumber;
}
export type NewVoteEvent = TypedEvent<
  [string, BigNumber, BigNumber, BigNumber],
  NewVoteEventObject
>;

export type NewVoteEventFilter = TypedEventFilter<NewVoteEvent>;

export interface ProposalCancelledEventObject {
  _id: BigNumber;
  _method: BigNumber;
  _params: string;
}
export type ProposalCancelledEvent = TypedEvent<
  [BigNumber, BigNumber, string],
  ProposalCancelledEventObject
>;

export type ProposalCancelledEventFilter =
  TypedEventFilter<ProposalCancelledEvent>;

export interface ProposalExecutedEventObject {
  _id: BigNumber;
  _method: BigNumber;
  _params: string;
}
export type ProposalExecutedEvent = TypedEvent<
  [BigNumber, BigNumber, string],
  ProposalExecutedEventObject
>;

export type ProposalExecutedEventFilter =
  TypedEventFilter<ProposalExecutedEvent>;

export interface ProposalQueuedEventObject {
  _id: BigNumber;
  _method: BigNumber;
  _params: string;
}
export type ProposalQueuedEvent = TypedEvent<
  [BigNumber, BigNumber, string],
  ProposalQueuedEventObject
>;

export type ProposalQueuedEventFilter = TypedEventFilter<ProposalQueuedEvent>;

export interface VoteCancelledEventObject {
  _voter: string;
  _method: BigNumber;
  _id: BigNumber;
}
export type VoteCancelledEvent = TypedEvent<
  [string, BigNumber, BigNumber],
  VoteCancelledEventObject
>;

export type VoteCancelledEventFilter = TypedEventFilter<VoteCancelledEvent>;

export interface IGovernorMiniBravo extends BaseContract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  interface: IGovernorMiniBravoInterface;

  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: {
    QUORUM(
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _quorum: BigNumber }>;

    cancelProposal(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    cancelVote(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    execute(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    executionTimelock(
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _executionTimelock: BigNumber }>;

    getLatest(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<
      [IGovernorMiniBravo.ProposalStructOutput] & {
        _proposal: IGovernorMiniBravo.ProposalStructOutput;
      }
    >;

    isExecutable(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[boolean] & { _availableToExecute: boolean }>;

    queue(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    quorumReached(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[boolean] & { _quorumReached: boolean }>;

    totalVotes(
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _totalVotes: BigNumber }>;

    votingPower(
      _user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _balance: BigNumber }>;
  };

  QUORUM(overrides?: CallOverrides): Promise<BigNumber>;

  cancelProposal(
    _method: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  cancelVote(
    _method: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  execute(
    _method: PromiseOrValue<BigNumberish>,
    _parameters: PromiseOrValue<BytesLike>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  executionTimelock(overrides?: CallOverrides): Promise<BigNumber>;

  getLatest(
    _method: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<IGovernorMiniBravo.ProposalStructOutput>;

  isExecutable(
    _method: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  queue(
    _method: PromiseOrValue<BigNumberish>,
    _parameters: PromiseOrValue<BytesLike>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  quorumReached(
    _method: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  totalVotes(overrides?: CallOverrides): Promise<BigNumber>;

  votingPower(
    _user: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  callStatic: {
    QUORUM(overrides?: CallOverrides): Promise<BigNumber>;

    cancelProposal(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    cancelVote(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    execute(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<void>;

    executionTimelock(overrides?: CallOverrides): Promise<BigNumber>;

    getLatest(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<IGovernorMiniBravo.ProposalStructOutput>;

    isExecutable(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    queue(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<void>;

    quorumReached(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    totalVotes(overrides?: CallOverrides): Promise<BigNumber>;

    votingPower(
      _user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;
  };

  filters: {
    "NewProposal(uint256,uint256,bytes)"(
      _id?: null,
      _method?: null,
      _params?: null
    ): NewProposalEventFilter;
    NewProposal(
      _id?: null,
      _method?: null,
      _params?: null
    ): NewProposalEventFilter;

    "NewVote(address,uint256,uint256,uint256)"(
      _voter?: null,
      _votes?: null,
      _method?: null,
      _id?: null
    ): NewVoteEventFilter;
    NewVote(
      _voter?: null,
      _votes?: null,
      _method?: null,
      _id?: null
    ): NewVoteEventFilter;

    "ProposalCancelled(uint256,uint256,bytes)"(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalCancelledEventFilter;
    ProposalCancelled(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalCancelledEventFilter;

    "ProposalExecuted(uint256,uint256,bytes)"(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalExecutedEventFilter;
    ProposalExecuted(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalExecutedEventFilter;

    "ProposalQueued(uint256,uint256,bytes)"(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalQueuedEventFilter;
    ProposalQueued(
      _id?: null,
      _method?: null,
      _params?: null
    ): ProposalQueuedEventFilter;

    "VoteCancelled(address,uint256,uint256)"(
      _voter?: null,
      _method?: null,
      _id?: null
    ): VoteCancelledEventFilter;
    VoteCancelled(
      _voter?: null,
      _method?: null,
      _id?: null
    ): VoteCancelledEventFilter;
  };

  estimateGas: {
    QUORUM(overrides?: CallOverrides): Promise<BigNumber>;

    cancelProposal(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    cancelVote(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    execute(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    executionTimelock(overrides?: CallOverrides): Promise<BigNumber>;

    getLatest(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isExecutable(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    queue(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    quorumReached(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    totalVotes(overrides?: CallOverrides): Promise<BigNumber>;

    votingPower(
      _user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    QUORUM(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    cancelProposal(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    cancelVote(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    execute(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    executionTimelock(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getLatest(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isExecutable(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    queue(
      _method: PromiseOrValue<BigNumberish>,
      _parameters: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    quorumReached(
      _method: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    totalVotes(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    votingPower(
      _user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;
  };
}
