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

export interface AdministrationUtilsInterface extends Interface {
  getEvent(
    nameOrSignatureOrTopic:
      | "AppAdminUpdated"
      | "AppMetadataURIUpdated"
      | "CreatorAddedToApp"
      | "CreatorRemovedFromApp"
      | "ModeratorAddedToApp"
      | "ModeratorRemovedFromApp"
      | "RewardDistributorAddedToApp"
      | "RewardDistributorRemovedFromApp"
      | "RewardsPoolEnabledForNewApp"
      | "TeamAllocationPercentageUpdated"
      | "TeamWalletAddressUpdated"
  ): EventFragment;
}

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

export namespace AppMetadataURIUpdatedEvent {
  export type InputTuple = [
    appId: BytesLike,
    oldMetadataURI: string,
    newMetadataURI: string
  ];
  export type OutputTuple = [
    appId: string,
    oldMetadataURI: string,
    newMetadataURI: string
  ];
  export interface OutputObject {
    appId: string;
    oldMetadataURI: string;
    newMetadataURI: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

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

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

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

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

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

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

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

export namespace TeamAllocationPercentageUpdatedEvent {
  export type InputTuple = [
    appId: BytesLike,
    oldPercentage: BigNumberish,
    newPercentage: BigNumberish
  ];
  export type OutputTuple = [
    appId: string,
    oldPercentage: bigint,
    newPercentage: bigint
  ];
  export interface OutputObject {
    appId: string;
    oldPercentage: bigint;
    newPercentage: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace TeamWalletAddressUpdatedEvent {
  export type InputTuple = [
    appId: BytesLike,
    oldTeamWalletAddress: AddressLike,
    newTeamWalletAddress: AddressLike
  ];
  export type OutputTuple = [
    appId: string,
    oldTeamWalletAddress: string,
    newTeamWalletAddress: string
  ];
  export interface OutputObject {
    appId: string;
    oldTeamWalletAddress: string;
    newTeamWalletAddress: 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 AdministrationUtils extends BaseContract {
  connect(runner?: ContractRunner | null): AdministrationUtils;
  waitForDeployment(): Promise<this>;

  interface: AdministrationUtilsInterface;

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

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

  getEvent(
    key: "AppAdminUpdated"
  ): TypedContractEvent<
    AppAdminUpdatedEvent.InputTuple,
    AppAdminUpdatedEvent.OutputTuple,
    AppAdminUpdatedEvent.OutputObject
  >;
  getEvent(
    key: "AppMetadataURIUpdated"
  ): TypedContractEvent<
    AppMetadataURIUpdatedEvent.InputTuple,
    AppMetadataURIUpdatedEvent.OutputTuple,
    AppMetadataURIUpdatedEvent.OutputObject
  >;
  getEvent(
    key: "CreatorAddedToApp"
  ): TypedContractEvent<
    CreatorAddedToAppEvent.InputTuple,
    CreatorAddedToAppEvent.OutputTuple,
    CreatorAddedToAppEvent.OutputObject
  >;
  getEvent(
    key: "CreatorRemovedFromApp"
  ): TypedContractEvent<
    CreatorRemovedFromAppEvent.InputTuple,
    CreatorRemovedFromAppEvent.OutputTuple,
    CreatorRemovedFromAppEvent.OutputObject
  >;
  getEvent(
    key: "ModeratorAddedToApp"
  ): TypedContractEvent<
    ModeratorAddedToAppEvent.InputTuple,
    ModeratorAddedToAppEvent.OutputTuple,
    ModeratorAddedToAppEvent.OutputObject
  >;
  getEvent(
    key: "ModeratorRemovedFromApp"
  ): TypedContractEvent<
    ModeratorRemovedFromAppEvent.InputTuple,
    ModeratorRemovedFromAppEvent.OutputTuple,
    ModeratorRemovedFromAppEvent.OutputObject
  >;
  getEvent(
    key: "RewardDistributorAddedToApp"
  ): TypedContractEvent<
    RewardDistributorAddedToAppEvent.InputTuple,
    RewardDistributorAddedToAppEvent.OutputTuple,
    RewardDistributorAddedToAppEvent.OutputObject
  >;
  getEvent(
    key: "RewardDistributorRemovedFromApp"
  ): TypedContractEvent<
    RewardDistributorRemovedFromAppEvent.InputTuple,
    RewardDistributorRemovedFromAppEvent.OutputTuple,
    RewardDistributorRemovedFromAppEvent.OutputObject
  >;
  getEvent(
    key: "RewardsPoolEnabledForNewApp"
  ): TypedContractEvent<
    RewardsPoolEnabledForNewAppEvent.InputTuple,
    RewardsPoolEnabledForNewAppEvent.OutputTuple,
    RewardsPoolEnabledForNewAppEvent.OutputObject
  >;
  getEvent(
    key: "TeamAllocationPercentageUpdated"
  ): TypedContractEvent<
    TeamAllocationPercentageUpdatedEvent.InputTuple,
    TeamAllocationPercentageUpdatedEvent.OutputTuple,
    TeamAllocationPercentageUpdatedEvent.OutputObject
  >;
  getEvent(
    key: "TeamWalletAddressUpdated"
  ): TypedContractEvent<
    TeamWalletAddressUpdatedEvent.InputTuple,
    TeamWalletAddressUpdatedEvent.OutputTuple,
    TeamWalletAddressUpdatedEvent.OutputObject
  >;

  filters: {
    "AppAdminUpdated(bytes32,address,address)": TypedContractEvent<
      AppAdminUpdatedEvent.InputTuple,
      AppAdminUpdatedEvent.OutputTuple,
      AppAdminUpdatedEvent.OutputObject
    >;
    AppAdminUpdated: TypedContractEvent<
      AppAdminUpdatedEvent.InputTuple,
      AppAdminUpdatedEvent.OutputTuple,
      AppAdminUpdatedEvent.OutputObject
    >;

    "AppMetadataURIUpdated(bytes32,string,string)": TypedContractEvent<
      AppMetadataURIUpdatedEvent.InputTuple,
      AppMetadataURIUpdatedEvent.OutputTuple,
      AppMetadataURIUpdatedEvent.OutputObject
    >;
    AppMetadataURIUpdated: TypedContractEvent<
      AppMetadataURIUpdatedEvent.InputTuple,
      AppMetadataURIUpdatedEvent.OutputTuple,
      AppMetadataURIUpdatedEvent.OutputObject
    >;

    "CreatorAddedToApp(bytes32,address)": TypedContractEvent<
      CreatorAddedToAppEvent.InputTuple,
      CreatorAddedToAppEvent.OutputTuple,
      CreatorAddedToAppEvent.OutputObject
    >;
    CreatorAddedToApp: TypedContractEvent<
      CreatorAddedToAppEvent.InputTuple,
      CreatorAddedToAppEvent.OutputTuple,
      CreatorAddedToAppEvent.OutputObject
    >;

    "CreatorRemovedFromApp(bytes32,address)": TypedContractEvent<
      CreatorRemovedFromAppEvent.InputTuple,
      CreatorRemovedFromAppEvent.OutputTuple,
      CreatorRemovedFromAppEvent.OutputObject
    >;
    CreatorRemovedFromApp: TypedContractEvent<
      CreatorRemovedFromAppEvent.InputTuple,
      CreatorRemovedFromAppEvent.OutputTuple,
      CreatorRemovedFromAppEvent.OutputObject
    >;

    "ModeratorAddedToApp(bytes32,address)": TypedContractEvent<
      ModeratorAddedToAppEvent.InputTuple,
      ModeratorAddedToAppEvent.OutputTuple,
      ModeratorAddedToAppEvent.OutputObject
    >;
    ModeratorAddedToApp: TypedContractEvent<
      ModeratorAddedToAppEvent.InputTuple,
      ModeratorAddedToAppEvent.OutputTuple,
      ModeratorAddedToAppEvent.OutputObject
    >;

    "ModeratorRemovedFromApp(bytes32,address)": TypedContractEvent<
      ModeratorRemovedFromAppEvent.InputTuple,
      ModeratorRemovedFromAppEvent.OutputTuple,
      ModeratorRemovedFromAppEvent.OutputObject
    >;
    ModeratorRemovedFromApp: TypedContractEvent<
      ModeratorRemovedFromAppEvent.InputTuple,
      ModeratorRemovedFromAppEvent.OutputTuple,
      ModeratorRemovedFromAppEvent.OutputObject
    >;

    "RewardDistributorAddedToApp(bytes32,address)": TypedContractEvent<
      RewardDistributorAddedToAppEvent.InputTuple,
      RewardDistributorAddedToAppEvent.OutputTuple,
      RewardDistributorAddedToAppEvent.OutputObject
    >;
    RewardDistributorAddedToApp: TypedContractEvent<
      RewardDistributorAddedToAppEvent.InputTuple,
      RewardDistributorAddedToAppEvent.OutputTuple,
      RewardDistributorAddedToAppEvent.OutputObject
    >;

    "RewardDistributorRemovedFromApp(bytes32,address)": TypedContractEvent<
      RewardDistributorRemovedFromAppEvent.InputTuple,
      RewardDistributorRemovedFromAppEvent.OutputTuple,
      RewardDistributorRemovedFromAppEvent.OutputObject
    >;
    RewardDistributorRemovedFromApp: TypedContractEvent<
      RewardDistributorRemovedFromAppEvent.InputTuple,
      RewardDistributorRemovedFromAppEvent.OutputTuple,
      RewardDistributorRemovedFromAppEvent.OutputObject
    >;

    "RewardsPoolEnabledForNewApp(bytes32)": TypedContractEvent<
      RewardsPoolEnabledForNewAppEvent.InputTuple,
      RewardsPoolEnabledForNewAppEvent.OutputTuple,
      RewardsPoolEnabledForNewAppEvent.OutputObject
    >;
    RewardsPoolEnabledForNewApp: TypedContractEvent<
      RewardsPoolEnabledForNewAppEvent.InputTuple,
      RewardsPoolEnabledForNewAppEvent.OutputTuple,
      RewardsPoolEnabledForNewAppEvent.OutputObject
    >;

    "TeamAllocationPercentageUpdated(bytes32,uint256,uint256)": TypedContractEvent<
      TeamAllocationPercentageUpdatedEvent.InputTuple,
      TeamAllocationPercentageUpdatedEvent.OutputTuple,
      TeamAllocationPercentageUpdatedEvent.OutputObject
    >;
    TeamAllocationPercentageUpdated: TypedContractEvent<
      TeamAllocationPercentageUpdatedEvent.InputTuple,
      TeamAllocationPercentageUpdatedEvent.OutputTuple,
      TeamAllocationPercentageUpdatedEvent.OutputObject
    >;

    "TeamWalletAddressUpdated(bytes32,address,address)": TypedContractEvent<
      TeamWalletAddressUpdatedEvent.InputTuple,
      TeamWalletAddressUpdatedEvent.OutputTuple,
      TeamWalletAddressUpdatedEvent.OutputObject
    >;
    TeamWalletAddressUpdated: TypedContractEvent<
      TeamWalletAddressUpdatedEvent.InputTuple,
      TeamWalletAddressUpdatedEvent.OutputTuple,
      TeamWalletAddressUpdatedEvent.OutputObject
    >;
  };
}
