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

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

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

export type AddedPermissions = ContractEventLog<{
  role: string;
  resource: string;
  permissionsToAdd: string[];
  allowed: boolean;
  0: string;
  1: string;
  2: string[];
  3: boolean;
}>;
export type GrantedRoles = ContractEventLog<{
  to: string;
  rolesToGrant: string[];
  0: string;
  1: string[];
}>;
export type RemovedPermissions = ContractEventLog<{
  role: string;
  resource: string;
  permissionsToRemove: string[];
  allowed: boolean;
  0: string;
  1: string;
  2: string[];
  3: boolean;
}>;
export type RevokedRoles = ContractEventLog<{
  from: string;
  rolesToRevoke: string[];
  0: string;
  1: string[];
}>;

export interface IPermissionManager extends BaseContract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  ): IPermissionManager;
  clone(): IPermissionManager;
  methods: {
    addPermissionsToRole(
      role_: string,
      permissionsToAdd_: [string, string[]][],
      allowed_: boolean
    ): NonPayableTransactionObject<void>;

    addVetoGroup(
      target_: string,
      name_: string,
      initialMembers_: string[],
      linkedMemberStorage_: string
    ): NonPayableTransactionObject<void>;

    addVetoGroupMember(
      member_: string,
      target_: string
    ): NonPayableTransactionObject<void>;

    addVetoGroups(
      vetoGroups_: [string, string, string[], string][]
    ): NonPayableTransactionObject<void>;

    checkPermission(
      member_: string,
      permission_: string
    ): NonPayableTransactionObject<boolean>;

    confExpertsGroups(
      dao_: string,
      voting_: string,
      panelName_: string
    ): NonPayableTransactionObject<void>;

    confMemberGroup(
      dao_: string,
      voting_: string,
      panelName_: string
    ): NonPayableTransactionObject<void>;

    confVotingModule(
      dao_: string,
      voting_: string,
      panelName_: string
    ): NonPayableTransactionObject<void>;

    getResource(): NonPayableTransactionObject<string>;

    getRolePermissions(role_: string): NonPayableTransactionObject<{
      allowed_: [string, string[]][];
      disallowed_: [string, string[]][];
      0: [string, string[]][];
      1: [string, string[]][];
    }>;

    getUserRoles(who_: string): NonPayableTransactionObject<string[]>;

    getVetoGroupInfo(target_: string): NonPayableTransactionObject<{
      0: string;
      1: string;
      2: string[];
      3: string;
    }>;

    getVetoMembersCount(target_: string): NonPayableTransactionObject<string>;

    grantRoles(
      to_: string,
      rolesToGrant_: string[]
    ): NonPayableTransactionObject<void>;

    hasPermission(
      who_: string,
      resource_: string,
      permission_: string
    ): NonPayableTransactionObject<boolean>;

    initialConfiguration(
      dao_: string,
      voting_: string,
      panelName_: string
    ): NonPayableTransactionObject<void>;

    linkStorageToVetoGroup(
      target_: string,
      linkedMemberStorage_: string
    ): NonPayableTransactionObject<void>;

    removePermissionsFromRole(
      role_: string,
      permissionsToRemove_: [string, string[]][],
      allowed_: boolean
    ): NonPayableTransactionObject<void>;

    removeVetoGroup(target_: string): NonPayableTransactionObject<void>;

    removeVetoGroupMember(
      member_: string,
      target_: string
    ): NonPayableTransactionObject<void>;

    revokeRoles(
      from_: string,
      rolesToRevoke_: string[]
    ): NonPayableTransactionObject<void>;
  };
  events: {
    AddedPermissions(cb?: Callback<AddedPermissions>): EventEmitter;
    AddedPermissions(
      options?: EventOptions,
      cb?: Callback<AddedPermissions>
    ): EventEmitter;

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

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

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

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

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

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

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

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