/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumberish,
  BytesLike,
  FunctionFragment,
  Result,
  Interface,
  EventFragment,
  AddressLike,
  ContractRunner,
  ContractMethod,
  Listener,
} from "ethers";
import type {
  TypedContractEvent,
  TypedDeferredTopicFilter,
  TypedEventLog,
  TypedLogDescription,
  TypedListener,
  TypedContractMethod,
} from "../../../common";

export interface AutoVotingLogicInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "getTotalAutoVotingUsers"
      | "getTotalAutoVotingUsersAtTimepoint"
      | "getUserVotingPreferences"
      | "isAutoVotingEnabled"
      | "isAutoVotingEnabledAtTimepoint"
      | "prepareAutoVoteArrays"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic: "AutoVotingToggled" | "PreferredAppsUpdated"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "getTotalAutoVotingUsers",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getTotalAutoVotingUsersAtTimepoint",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getUserVotingPreferences",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isAutoVotingEnabled",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isAutoVotingEnabledAtTimepoint",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "prepareAutoVoteArrays",
    values: [AddressLike, AddressLike, BigNumberish, BytesLike[]]
  ): string;

  decodeFunctionResult(
    functionFragment: "getTotalAutoVotingUsers",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getTotalAutoVotingUsersAtTimepoint",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getUserVotingPreferences",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isAutoVotingEnabled",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isAutoVotingEnabledAtTimepoint",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "prepareAutoVoteArrays",
    data: BytesLike
  ): Result;
}

export namespace AutoVotingToggledEvent {
  export type InputTuple = [account: AddressLike, enabled: boolean];
  export type OutputTuple = [account: string, enabled: boolean];
  export interface OutputObject {
    account: string;
    enabled: boolean;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace PreferredAppsUpdatedEvent {
  export type InputTuple = [account: AddressLike, apps: BytesLike[]];
  export type OutputTuple = [account: string, apps: string[]];
  export interface OutputObject {
    account: string;
    apps: string[];
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export interface AutoVotingLogic extends BaseContract {
  connect(runner?: ContractRunner | null): AutoVotingLogic;
  waitForDeployment(): Promise<this>;

  interface: AutoVotingLogicInterface;

  queryFilter<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEventLog<TCEvent>>>;
  queryFilter<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEventLog<TCEvent>>>;

  on<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    listener: TypedListener<TCEvent>
  ): Promise<this>;
  on<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>
  ): Promise<this>;

  once<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    listener: TypedListener<TCEvent>
  ): Promise<this>;
  once<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>
  ): Promise<this>;

  listeners<TCEvent extends TypedContractEvent>(
    event: TCEvent
  ): Promise<Array<TypedListener<TCEvent>>>;
  listeners(eventName?: string): Promise<Array<Listener>>;
  removeAllListeners<TCEvent extends TypedContractEvent>(
    event?: TCEvent
  ): Promise<this>;

  getTotalAutoVotingUsers: TypedContractMethod<
    [clock: BigNumberish],
    [bigint],
    "view"
  >;

  getTotalAutoVotingUsersAtTimepoint: TypedContractMethod<
    [timepoint: BigNumberish],
    [bigint],
    "view"
  >;

  getUserVotingPreferences: TypedContractMethod<
    [account: AddressLike],
    [string[]],
    "view"
  >;

  isAutoVotingEnabled: TypedContractMethod<
    [account: AddressLike],
    [boolean],
    "view"
  >;

  isAutoVotingEnabledAtTimepoint: TypedContractMethod<
    [account: AddressLike, timepoint: BigNumberish],
    [boolean],
    "view"
  >;

  prepareAutoVoteArrays: TypedContractMethod<
    [
      xAllocationVotingGovernorAddress: AddressLike,
      voter: AddressLike,
      roundId: BigNumberish,
      preferredApps: BytesLike[]
    ],
    [
      [string[], bigint[], bigint] & {
        finalAppIds: string[];
        voteWeights: bigint[];
        votingPower: bigint;
      }
    ],
    "view"
  >;

  getFunction<T extends ContractMethod = ContractMethod>(
    key: string | FunctionFragment
  ): T;

  getFunction(
    nameOrSignature: "getTotalAutoVotingUsers"
  ): TypedContractMethod<[clock: BigNumberish], [bigint], "view">;
  getFunction(
    nameOrSignature: "getTotalAutoVotingUsersAtTimepoint"
  ): TypedContractMethod<[timepoint: BigNumberish], [bigint], "view">;
  getFunction(
    nameOrSignature: "getUserVotingPreferences"
  ): TypedContractMethod<[account: AddressLike], [string[]], "view">;
  getFunction(
    nameOrSignature: "isAutoVotingEnabled"
  ): TypedContractMethod<[account: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isAutoVotingEnabledAtTimepoint"
  ): TypedContractMethod<
    [account: AddressLike, timepoint: BigNumberish],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "prepareAutoVoteArrays"
  ): TypedContractMethod<
    [
      xAllocationVotingGovernorAddress: AddressLike,
      voter: AddressLike,
      roundId: BigNumberish,
      preferredApps: BytesLike[]
    ],
    [
      [string[], bigint[], bigint] & {
        finalAppIds: string[];
        voteWeights: bigint[];
        votingPower: bigint;
      }
    ],
    "view"
  >;

  getEvent(
    key: "AutoVotingToggled"
  ): TypedContractEvent<
    AutoVotingToggledEvent.InputTuple,
    AutoVotingToggledEvent.OutputTuple,
    AutoVotingToggledEvent.OutputObject
  >;
  getEvent(
    key: "PreferredAppsUpdated"
  ): TypedContractEvent<
    PreferredAppsUpdatedEvent.InputTuple,
    PreferredAppsUpdatedEvent.OutputTuple,
    PreferredAppsUpdatedEvent.OutputObject
  >;

  filters: {
    "AutoVotingToggled(address,bool)": TypedContractEvent<
      AutoVotingToggledEvent.InputTuple,
      AutoVotingToggledEvent.OutputTuple,
      AutoVotingToggledEvent.OutputObject
    >;
    AutoVotingToggled: TypedContractEvent<
      AutoVotingToggledEvent.InputTuple,
      AutoVotingToggledEvent.OutputTuple,
      AutoVotingToggledEvent.OutputObject
    >;

    "PreferredAppsUpdated(address,bytes32[])": TypedContractEvent<
      PreferredAppsUpdatedEvent.InputTuple,
      PreferredAppsUpdatedEvent.OutputTuple,
      PreferredAppsUpdatedEvent.OutputObject
    >;
    PreferredAppsUpdated: TypedContractEvent<
      PreferredAppsUpdatedEvent.InputTuple,
      PreferredAppsUpdatedEvent.OutputTuple,
      PreferredAppsUpdatedEvent.OutputObject
    >;
  };
}
