/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumber,
  BigNumberish,
  BytesLike,
  CallOverrides,
  ContractTransaction,
  Overrides,
  PayableOverrides,
  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";

export declare namespace IVideoPayment {
  export type ContentPurchaseInfoStruct = {
    viewCount: BigNumberish;
    isActive: boolean;
    supportedTokens: string[];
    tokenPrices: BigNumberish[];
    isUnlimitedViewing: boolean;
  };

  export type ContentPurchaseInfoStructOutput = [
    BigNumber,
    boolean,
    string[],
    BigNumber[],
    boolean
  ] & {
    viewCount: BigNumber;
    isActive: boolean;
    supportedTokens: string[];
    tokenPrices: BigNumber[];
    isUnlimitedViewing: boolean;
  };
}

export declare namespace VideoPaymentStorage {
  export type ViewPermissionStruct = {
    purchaseTime: BigNumberish;
    remainingViews: BigNumberish;
    isValid: boolean;
  };

  export type ViewPermissionStructOutput = [BigNumber, BigNumber, boolean] & {
    purchaseTime: BigNumber;
    remainingViews: BigNumber;
    isValid: boolean;
  };
}

export interface IVideoPaymentInterface extends utils.Interface {
  functions: {
    "addAdmin(address)": FunctionFragment;
    "addSupportedToken(address)": FunctionFragment;
    "batchConsumeView(address[],uint256[])": FunctionFragment;
    "batchPurchase(uint256[],address,uint256)": FunctionFragment;
    "batchSetContentConfig(uint256[],address,uint256[],uint256[],bool[])": FunctionFragment;
    "batchSetContentPrice(uint256[],address,uint256[])": FunctionFragment;
    "consumeView(address,uint256)": FunctionFragment;
    "getAllSupportedTokens()": FunctionFragment;
    "getContentPurchaseInfo(uint256)": FunctionFragment;
    "getPermissionDetails(address,uint256)": FunctionFragment;
    "getTreasury()": FunctionFragment;
    "getUserPermissions(address,uint256[])": FunctionFragment;
    "hasViewPermission(address,uint256)": FunctionFragment;
    "isAdmin(address)": FunctionFragment;
    "isContentActive(uint256)": FunctionFragment;
    "isSupportedToken(address)": FunctionFragment;
    "migrate()": FunctionFragment;
    "owner()": FunctionFragment;
    "pause()": FunctionFragment;
    "purchaseContent(uint256,address,uint256)": FunctionFragment;
    "purchaseWithNFT(uint256,address,uint256)": FunctionFragment;
    "removeAdmin(address)": FunctionFragment;
    "removeSupportedToken(address)": FunctionFragment;
    "setContentConfig(uint256,address,uint256,uint256,bool)": FunctionFragment;
    "setContentPrice(uint256,address,uint256)": FunctionFragment;
    "setTreasury(address)": FunctionFragment;
    "unpause()": FunctionFragment;
    "version()": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "addAdmin"
      | "addSupportedToken"
      | "batchConsumeView"
      | "batchPurchase"
      | "batchSetContentConfig"
      | "batchSetContentPrice"
      | "consumeView"
      | "getAllSupportedTokens"
      | "getContentPurchaseInfo"
      | "getPermissionDetails"
      | "getTreasury"
      | "getUserPermissions"
      | "hasViewPermission"
      | "isAdmin"
      | "isContentActive"
      | "isSupportedToken"
      | "migrate"
      | "owner"
      | "pause"
      | "purchaseContent"
      | "purchaseWithNFT"
      | "removeAdmin"
      | "removeSupportedToken"
      | "setContentConfig"
      | "setContentPrice"
      | "setTreasury"
      | "unpause"
      | "version"
  ): FunctionFragment;

  encodeFunctionData(functionFragment: "addAdmin", values: [string]): string;
  encodeFunctionData(
    functionFragment: "addSupportedToken",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "batchConsumeView",
    values: [string[], BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "batchPurchase",
    values: [BigNumberish[], string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "batchSetContentConfig",
    values: [BigNumberish[], string, BigNumberish[], BigNumberish[], boolean[]]
  ): string;
  encodeFunctionData(
    functionFragment: "batchSetContentPrice",
    values: [BigNumberish[], string, BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "consumeView",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getAllSupportedTokens",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getContentPurchaseInfo",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getPermissionDetails",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getTreasury",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getUserPermissions",
    values: [string, BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "hasViewPermission",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "isAdmin", values: [string]): string;
  encodeFunctionData(
    functionFragment: "isContentActive",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "isSupportedToken",
    values: [string]
  ): string;
  encodeFunctionData(functionFragment: "migrate", values?: undefined): string;
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
  encodeFunctionData(functionFragment: "pause", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "purchaseContent",
    values: [BigNumberish, string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "purchaseWithNFT",
    values: [BigNumberish, string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "removeAdmin", values: [string]): string;
  encodeFunctionData(
    functionFragment: "removeSupportedToken",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "setContentConfig",
    values: [BigNumberish, string, BigNumberish, BigNumberish, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "setContentPrice",
    values: [BigNumberish, string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "setTreasury", values: [string]): string;
  encodeFunctionData(functionFragment: "unpause", values?: undefined): string;
  encodeFunctionData(functionFragment: "version", values?: undefined): string;

  decodeFunctionResult(functionFragment: "addAdmin", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "addSupportedToken",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchConsumeView",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchPurchase",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchSetContentConfig",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchSetContentPrice",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "consumeView",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getAllSupportedTokens",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getContentPurchaseInfo",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getPermissionDetails",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getTreasury",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getUserPermissions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "hasViewPermission",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "isAdmin", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isContentActive",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isSupportedToken",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "migrate", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "purchaseContent",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "purchaseWithNFT",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeAdmin",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeSupportedToken",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setContentConfig",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setContentPrice",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setTreasury",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "version", data: BytesLike): Result;

  events: {
    "AdminAdded(address)": EventFragment;
    "AdminRemoved(address)": EventFragment;
    "BatchPurchased(address,uint256[],address,uint256)": EventFragment;
    "ContentConfigUpdated(uint256)": EventFragment;
    "ContentPurchased(address,uint256,address,uint256,uint256)": EventFragment;
    "NFTPurchased(address,uint256,address,uint256)": EventFragment;
    "Paused()": EventFragment;
    "PermissionExpired(address,uint256)": EventFragment;
    "SupportedTokenAdded(address)": EventFragment;
    "SupportedTokenRemoved(address)": EventFragment;
    "TokenPriceUpdated(uint256,address,uint256)": EventFragment;
    "TreasuryUpdated(address,address)": EventFragment;
    "Unpaused()": EventFragment;
    "ViewConsumed(address,uint256,uint256)": EventFragment;
    "ViewCountAdded(address,uint256,uint256,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "AdminAdded"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AdminRemoved"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "BatchPurchased"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ContentConfigUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ContentPurchased"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "NFTPurchased"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "PermissionExpired"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SupportedTokenAdded"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SupportedTokenRemoved"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TokenPriceUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TreasuryUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ViewConsumed"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "ViewCountAdded"): EventFragment;
}

export interface AdminAddedEventObject {
  admin: string;
}
export type AdminAddedEvent = TypedEvent<[string], AdminAddedEventObject>;

export type AdminAddedEventFilter = TypedEventFilter<AdminAddedEvent>;

export interface AdminRemovedEventObject {
  admin: string;
}
export type AdminRemovedEvent = TypedEvent<[string], AdminRemovedEventObject>;

export type AdminRemovedEventFilter = TypedEventFilter<AdminRemovedEvent>;

export interface BatchPurchasedEventObject {
  user: string;
  contentIds: BigNumber[];
  paymentToken: string;
  totalAmount: BigNumber;
}
export type BatchPurchasedEvent = TypedEvent<
  [string, BigNumber[], string, BigNumber],
  BatchPurchasedEventObject
>;

export type BatchPurchasedEventFilter = TypedEventFilter<BatchPurchasedEvent>;

export interface ContentConfigUpdatedEventObject {
  contentId: BigNumber;
}
export type ContentConfigUpdatedEvent = TypedEvent<
  [BigNumber],
  ContentConfigUpdatedEventObject
>;

export type ContentConfigUpdatedEventFilter =
  TypedEventFilter<ContentConfigUpdatedEvent>;

export interface ContentPurchasedEventObject {
  user: string;
  contentId: BigNumber;
  paymentToken: string;
  amount: BigNumber;
  viewCount: BigNumber;
}
export type ContentPurchasedEvent = TypedEvent<
  [string, BigNumber, string, BigNumber, BigNumber],
  ContentPurchasedEventObject
>;

export type ContentPurchasedEventFilter =
  TypedEventFilter<ContentPurchasedEvent>;

export interface NFTPurchasedEventObject {
  user: string;
  contentId: BigNumber;
  nftContract: string;
  tokenId: BigNumber;
}
export type NFTPurchasedEvent = TypedEvent<
  [string, BigNumber, string, BigNumber],
  NFTPurchasedEventObject
>;

export type NFTPurchasedEventFilter = TypedEventFilter<NFTPurchasedEvent>;

export interface PausedEventObject {}
export type PausedEvent = TypedEvent<[], PausedEventObject>;

export type PausedEventFilter = TypedEventFilter<PausedEvent>;

export interface PermissionExpiredEventObject {
  user: string;
  contentId: BigNumber;
}
export type PermissionExpiredEvent = TypedEvent<
  [string, BigNumber],
  PermissionExpiredEventObject
>;

export type PermissionExpiredEventFilter =
  TypedEventFilter<PermissionExpiredEvent>;

export interface SupportedTokenAddedEventObject {
  token: string;
}
export type SupportedTokenAddedEvent = TypedEvent<
  [string],
  SupportedTokenAddedEventObject
>;

export type SupportedTokenAddedEventFilter =
  TypedEventFilter<SupportedTokenAddedEvent>;

export interface SupportedTokenRemovedEventObject {
  token: string;
}
export type SupportedTokenRemovedEvent = TypedEvent<
  [string],
  SupportedTokenRemovedEventObject
>;

export type SupportedTokenRemovedEventFilter =
  TypedEventFilter<SupportedTokenRemovedEvent>;

export interface TokenPriceUpdatedEventObject {
  contentId: BigNumber;
  token: string;
  price: BigNumber;
}
export type TokenPriceUpdatedEvent = TypedEvent<
  [BigNumber, string, BigNumber],
  TokenPriceUpdatedEventObject
>;

export type TokenPriceUpdatedEventFilter =
  TypedEventFilter<TokenPriceUpdatedEvent>;

export interface TreasuryUpdatedEventObject {
  oldTreasury: string;
  newTreasury: string;
}
export type TreasuryUpdatedEvent = TypedEvent<
  [string, string],
  TreasuryUpdatedEventObject
>;

export type TreasuryUpdatedEventFilter = TypedEventFilter<TreasuryUpdatedEvent>;

export interface UnpausedEventObject {}
export type UnpausedEvent = TypedEvent<[], UnpausedEventObject>;

export type UnpausedEventFilter = TypedEventFilter<UnpausedEvent>;

export interface ViewConsumedEventObject {
  user: string;
  contentId: BigNumber;
  remainingViews: BigNumber;
}
export type ViewConsumedEvent = TypedEvent<
  [string, BigNumber, BigNumber],
  ViewConsumedEventObject
>;

export type ViewConsumedEventFilter = TypedEventFilter<ViewConsumedEvent>;

export interface ViewCountAddedEventObject {
  user: string;
  contentId: BigNumber;
  addedCount: BigNumber;
  totalRemaining: BigNumber;
}
export type ViewCountAddedEvent = TypedEvent<
  [string, BigNumber, BigNumber, BigNumber],
  ViewCountAddedEventObject
>;

export type ViewCountAddedEventFilter = TypedEventFilter<ViewCountAddedEvent>;

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

  interface: IVideoPaymentInterface;

  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: {
    addAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    addSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    batchConsumeView(
      users: string[],
      contentIds: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    batchPurchase(
      contentIds: BigNumberish[],
      paymentToken: string,
      totalAmount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    batchSetContentConfig(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      viewCounts: BigNumberish[],
      isActiveArray: boolean[],
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    batchSetContentPrice(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    consumeView(
      user: string,
      contentId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    getAllSupportedTokens(overrides?: CallOverrides): Promise<[string[]]>;

    getContentPurchaseInfo(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[IVideoPayment.ContentPurchaseInfoStructOutput]>;

    getPermissionDetails(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[VideoPaymentStorage.ViewPermissionStructOutput]>;

    getTreasury(overrides?: CallOverrides): Promise<[string]>;

    getUserPermissions(
      user: string,
      contentIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<[VideoPaymentStorage.ViewPermissionStructOutput[]]>;

    hasViewPermission(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isAdmin(account: string, overrides?: CallOverrides): Promise<[boolean]>;

    isContentActive(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isSupportedToken(
      token: string,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    migrate(
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    owner(overrides?: CallOverrides): Promise<[string]>;

    pause(
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    purchaseContent(
      contentId: BigNumberish,
      paymentToken: string,
      amount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    purchaseWithNFT(
      contentId: BigNumberish,
      nftContract: string,
      tokenId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    removeAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    removeSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setContentConfig(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      viewCount: BigNumberish,
      isActive: boolean,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setContentPrice(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setTreasury(
      newTreasury: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    unpause(
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    version(overrides?: CallOverrides): Promise<[BigNumber]>;
  };

  addAdmin(
    admin: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  addSupportedToken(
    token: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  batchConsumeView(
    users: string[],
    contentIds: BigNumberish[],
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  batchPurchase(
    contentIds: BigNumberish[],
    paymentToken: string,
    totalAmount: BigNumberish,
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  batchSetContentConfig(
    contentIds: BigNumberish[],
    token: string,
    prices: BigNumberish[],
    viewCounts: BigNumberish[],
    isActiveArray: boolean[],
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  batchSetContentPrice(
    contentIds: BigNumberish[],
    token: string,
    prices: BigNumberish[],
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  consumeView(
    user: string,
    contentId: BigNumberish,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  getAllSupportedTokens(overrides?: CallOverrides): Promise<string[]>;

  getContentPurchaseInfo(
    contentId: BigNumberish,
    overrides?: CallOverrides
  ): Promise<IVideoPayment.ContentPurchaseInfoStructOutput>;

  getPermissionDetails(
    user: string,
    contentId: BigNumberish,
    overrides?: CallOverrides
  ): Promise<VideoPaymentStorage.ViewPermissionStructOutput>;

  getTreasury(overrides?: CallOverrides): Promise<string>;

  getUserPermissions(
    user: string,
    contentIds: BigNumberish[],
    overrides?: CallOverrides
  ): Promise<VideoPaymentStorage.ViewPermissionStructOutput[]>;

  hasViewPermission(
    user: string,
    contentId: BigNumberish,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isAdmin(account: string, overrides?: CallOverrides): Promise<boolean>;

  isContentActive(
    contentId: BigNumberish,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isSupportedToken(token: string, overrides?: CallOverrides): Promise<boolean>;

  migrate(
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  owner(overrides?: CallOverrides): Promise<string>;

  pause(
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  purchaseContent(
    contentId: BigNumberish,
    paymentToken: string,
    amount: BigNumberish,
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  purchaseWithNFT(
    contentId: BigNumberish,
    nftContract: string,
    tokenId: BigNumberish,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  removeAdmin(
    admin: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  removeSupportedToken(
    token: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setContentConfig(
    contentId: BigNumberish,
    token: string,
    price: BigNumberish,
    viewCount: BigNumberish,
    isActive: boolean,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setContentPrice(
    contentId: BigNumberish,
    token: string,
    price: BigNumberish,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setTreasury(
    newTreasury: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  unpause(
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

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

  callStatic: {
    addAdmin(admin: string, overrides?: CallOverrides): Promise<void>;

    addSupportedToken(token: string, overrides?: CallOverrides): Promise<void>;

    batchConsumeView(
      users: string[],
      contentIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<boolean[]>;

    batchPurchase(
      contentIds: BigNumberish[],
      paymentToken: string,
      totalAmount: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    batchSetContentConfig(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      viewCounts: BigNumberish[],
      isActiveArray: boolean[],
      overrides?: CallOverrides
    ): Promise<void>;

    batchSetContentPrice(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<void>;

    consumeView(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<boolean>;

    getAllSupportedTokens(overrides?: CallOverrides): Promise<string[]>;

    getContentPurchaseInfo(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<IVideoPayment.ContentPurchaseInfoStructOutput>;

    getPermissionDetails(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<VideoPaymentStorage.ViewPermissionStructOutput>;

    getTreasury(overrides?: CallOverrides): Promise<string>;

    getUserPermissions(
      user: string,
      contentIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<VideoPaymentStorage.ViewPermissionStructOutput[]>;

    hasViewPermission(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isAdmin(account: string, overrides?: CallOverrides): Promise<boolean>;

    isContentActive(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isSupportedToken(
      token: string,
      overrides?: CallOverrides
    ): Promise<boolean>;

    migrate(overrides?: CallOverrides): Promise<void>;

    owner(overrides?: CallOverrides): Promise<string>;

    pause(overrides?: CallOverrides): Promise<void>;

    purchaseContent(
      contentId: BigNumberish,
      paymentToken: string,
      amount: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    purchaseWithNFT(
      contentId: BigNumberish,
      nftContract: string,
      tokenId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    removeAdmin(admin: string, overrides?: CallOverrides): Promise<void>;

    removeSupportedToken(
      token: string,
      overrides?: CallOverrides
    ): Promise<void>;

    setContentConfig(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      viewCount: BigNumberish,
      isActive: boolean,
      overrides?: CallOverrides
    ): Promise<void>;

    setContentPrice(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    setTreasury(newTreasury: string, overrides?: CallOverrides): Promise<void>;

    unpause(overrides?: CallOverrides): Promise<void>;

    version(overrides?: CallOverrides): Promise<BigNumber>;
  };

  filters: {
    "AdminAdded(address)"(admin?: string | null): AdminAddedEventFilter;
    AdminAdded(admin?: string | null): AdminAddedEventFilter;

    "AdminRemoved(address)"(admin?: string | null): AdminRemovedEventFilter;
    AdminRemoved(admin?: string | null): AdminRemovedEventFilter;

    "BatchPurchased(address,uint256[],address,uint256)"(
      user?: string | null,
      contentIds?: null,
      paymentToken?: null,
      totalAmount?: null
    ): BatchPurchasedEventFilter;
    BatchPurchased(
      user?: string | null,
      contentIds?: null,
      paymentToken?: null,
      totalAmount?: null
    ): BatchPurchasedEventFilter;

    "ContentConfigUpdated(uint256)"(
      contentId?: BigNumberish | null
    ): ContentConfigUpdatedEventFilter;
    ContentConfigUpdated(
      contentId?: BigNumberish | null
    ): ContentConfigUpdatedEventFilter;

    "ContentPurchased(address,uint256,address,uint256,uint256)"(
      user?: string | null,
      contentId?: BigNumberish | null,
      paymentToken?: null,
      amount?: null,
      viewCount?: null
    ): ContentPurchasedEventFilter;
    ContentPurchased(
      user?: string | null,
      contentId?: BigNumberish | null,
      paymentToken?: null,
      amount?: null,
      viewCount?: null
    ): ContentPurchasedEventFilter;

    "NFTPurchased(address,uint256,address,uint256)"(
      user?: string | null,
      contentId?: BigNumberish | null,
      nftContract?: null,
      tokenId?: null
    ): NFTPurchasedEventFilter;
    NFTPurchased(
      user?: string | null,
      contentId?: BigNumberish | null,
      nftContract?: null,
      tokenId?: null
    ): NFTPurchasedEventFilter;

    "Paused()"(): PausedEventFilter;
    Paused(): PausedEventFilter;

    "PermissionExpired(address,uint256)"(
      user?: string | null,
      contentId?: BigNumberish | null
    ): PermissionExpiredEventFilter;
    PermissionExpired(
      user?: string | null,
      contentId?: BigNumberish | null
    ): PermissionExpiredEventFilter;

    "SupportedTokenAdded(address)"(
      token?: string | null
    ): SupportedTokenAddedEventFilter;
    SupportedTokenAdded(token?: string | null): SupportedTokenAddedEventFilter;

    "SupportedTokenRemoved(address)"(
      token?: string | null
    ): SupportedTokenRemovedEventFilter;
    SupportedTokenRemoved(
      token?: string | null
    ): SupportedTokenRemovedEventFilter;

    "TokenPriceUpdated(uint256,address,uint256)"(
      contentId?: BigNumberish | null,
      token?: string | null,
      price?: null
    ): TokenPriceUpdatedEventFilter;
    TokenPriceUpdated(
      contentId?: BigNumberish | null,
      token?: string | null,
      price?: null
    ): TokenPriceUpdatedEventFilter;

    "TreasuryUpdated(address,address)"(
      oldTreasury?: string | null,
      newTreasury?: string | null
    ): TreasuryUpdatedEventFilter;
    TreasuryUpdated(
      oldTreasury?: string | null,
      newTreasury?: string | null
    ): TreasuryUpdatedEventFilter;

    "Unpaused()"(): UnpausedEventFilter;
    Unpaused(): UnpausedEventFilter;

    "ViewConsumed(address,uint256,uint256)"(
      user?: string | null,
      contentId?: BigNumberish | null,
      remainingViews?: null
    ): ViewConsumedEventFilter;
    ViewConsumed(
      user?: string | null,
      contentId?: BigNumberish | null,
      remainingViews?: null
    ): ViewConsumedEventFilter;

    "ViewCountAdded(address,uint256,uint256,uint256)"(
      user?: string | null,
      contentId?: BigNumberish | null,
      addedCount?: null,
      totalRemaining?: null
    ): ViewCountAddedEventFilter;
    ViewCountAdded(
      user?: string | null,
      contentId?: BigNumberish | null,
      addedCount?: null,
      totalRemaining?: null
    ): ViewCountAddedEventFilter;
  };

  estimateGas: {
    addAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    addSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    batchConsumeView(
      users: string[],
      contentIds: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    batchPurchase(
      contentIds: BigNumberish[],
      paymentToken: string,
      totalAmount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    batchSetContentConfig(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      viewCounts: BigNumberish[],
      isActiveArray: boolean[],
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    batchSetContentPrice(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    consumeView(
      user: string,
      contentId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

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

    getContentPurchaseInfo(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getPermissionDetails(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

    getUserPermissions(
      user: string,
      contentIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    hasViewPermission(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isAdmin(account: string, overrides?: CallOverrides): Promise<BigNumber>;

    isContentActive(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isSupportedToken(
      token: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    migrate(overrides?: Overrides & { from?: string }): Promise<BigNumber>;

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

    pause(overrides?: Overrides & { from?: string }): Promise<BigNumber>;

    purchaseContent(
      contentId: BigNumberish,
      paymentToken: string,
      amount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    purchaseWithNFT(
      contentId: BigNumberish,
      nftContract: string,
      tokenId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    removeAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    removeSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setContentConfig(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      viewCount: BigNumberish,
      isActive: boolean,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setContentPrice(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setTreasury(
      newTreasury: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    unpause(overrides?: Overrides & { from?: string }): Promise<BigNumber>;

    version(overrides?: CallOverrides): Promise<BigNumber>;
  };

  populateTransaction: {
    addAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    addSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    batchConsumeView(
      users: string[],
      contentIds: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    batchPurchase(
      contentIds: BigNumberish[],
      paymentToken: string,
      totalAmount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    batchSetContentConfig(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      viewCounts: BigNumberish[],
      isActiveArray: boolean[],
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    batchSetContentPrice(
      contentIds: BigNumberish[],
      token: string,
      prices: BigNumberish[],
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    consumeView(
      user: string,
      contentId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

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

    getContentPurchaseInfo(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getPermissionDetails(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

    getUserPermissions(
      user: string,
      contentIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    hasViewPermission(
      user: string,
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isAdmin(
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isContentActive(
      contentId: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isSupportedToken(
      token: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    migrate(
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

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

    pause(
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    purchaseContent(
      contentId: BigNumberish,
      paymentToken: string,
      amount: BigNumberish,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    purchaseWithNFT(
      contentId: BigNumberish,
      nftContract: string,
      tokenId: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    removeAdmin(
      admin: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    removeSupportedToken(
      token: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setContentConfig(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      viewCount: BigNumberish,
      isActive: boolean,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setContentPrice(
      contentId: BigNumberish,
      token: string,
      price: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setTreasury(
      newTreasury: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    unpause(
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    version(overrides?: CallOverrides): Promise<PopulatedTransaction>;
  };
}
