import BigNumber from 'bignumber.js';
import sinon from 'sinon';
import { Account, Asset, AuthorizationRequest, Checkpoint, CheckpointSchedule, CorporateAction, CustomPermissionGroup, DefaultPortfolio, DividendDistribution, Identity, Instruction, KnownPermissionGroup, NumberedPortfolio, Offering, Subsidy, TickerReservation, Venue } from "../../internal";
import { Mocked } from "../types";
import { AccountBalance, ActiveTransferRestrictions, AgentWithGroup, AssetDetails, AssetWithGroup, Authorization, CalendarPeriod, CheckPermissionsResult, CheckRolesResult, ComplianceRequirements, CorporateActionDefaultConfig, CorporateActionKind, CorporateActionTargets, CountTransferRestriction, DistributionParticipant, DividendDistributionDetails, ExtrinsicData, GroupPermissions, IdentityBalance, InstructionDetails, Leg, OfferingDetails, PercentageTransferRestriction, PermissionedAccount, PermissionGroups, PermissionGroupType, PortfolioBalance, ResultSet, ScheduleDetails, ScheduleWithDetails, SecurityIdentifier, Signer, SignerType, TaxWithholding, TickerReservationDetails, TransferStatus, VenueDetails } from "../../types";
export declare type MockIdentity = Mocked<Identity>;
export declare type MockAccount = Mocked<Account>;
export declare type MockSubsidy = Mocked<Subsidy>;
export declare type MockTickerReservation = Mocked<TickerReservation>;
export declare type MockAsset = Mocked<Asset>;
export declare type MockAuthorizationRequest = Mocked<AuthorizationRequest>;
export declare type MockVenue = Mocked<Venue>;
export declare type MockInstruction = Mocked<Instruction>;
export declare type MockNumberedPortfolio = Mocked<NumberedPortfolio>;
export declare type MockDefaultPortfolio = Mocked<DefaultPortfolio>;
export declare type MockOffering = Mocked<Offering>;
export declare type MockCheckpoint = Mocked<Checkpoint>;
export declare type MockCheckpointSchedule = Mocked<CheckpointSchedule>;
export declare type MockCorporateAction = Mocked<CorporateAction>;
export declare type MockDividendDistribution = Mocked<DividendDistribution>;
export declare type MockCustomPermissionGroup = Mocked<CustomPermissionGroup>;
export declare type MockKnownPermissionGroup = Mocked<KnownPermissionGroup>;
interface EntityOptions {
    exists?: boolean;
    isEqual?: boolean;
    toJson?: any;
}
declare type EntityGetter<Result> = Partial<Result> | ((...args: any) => any) | sinon.SinonStub;
interface IdentityOptions extends EntityOptions {
    did?: string;
    hasRoles?: EntityGetter<boolean>;
    hasRole?: EntityGetter<boolean>;
    checkRoles?: EntityGetter<CheckRolesResult>;
    assetPermissionsHasPermissions?: EntityGetter<boolean>;
    assetPermissionsCheckPermissions?: EntityGetter<CheckPermissionsResult<SignerType.Identity>>;
    hasValidCdd?: EntityGetter<boolean>;
    isCddProvider?: EntityGetter<boolean>;
    getPrimaryAccount?: EntityGetter<PermissionedAccount>;
    authorizationsGetReceived?: EntityGetter<AuthorizationRequest[]>;
    authorizationsGetSent?: EntityGetter<ResultSet<AuthorizationRequest>>;
    getVenues?: EntityGetter<Venue[]>;
    getScopeId?: EntityGetter<string>;
    getAssetBalance?: EntityGetter<BigNumber>;
    getSecondaryAccounts?: EntityGetter<PermissionedAccount[]>;
    areSecondaryAccountsFrozen?: EntityGetter<boolean>;
    assetPermissionsGetGroup?: EntityGetter<CustomPermissionGroup | KnownPermissionGroup>;
    assetPermissionsGet?: EntityGetter<AssetWithGroup[]>;
}
interface TickerReservationOptions extends EntityOptions {
    ticker?: string;
    details?: EntityGetter<TickerReservationDetails>;
}
interface AssetOptions extends EntityOptions {
    ticker?: string;
    did?: string;
    details?: EntityGetter<AssetDetails>;
    currentFundingRound?: EntityGetter<string>;
    isFrozen?: EntityGetter<boolean>;
    transfersCanTransfer?: EntityGetter<TransferStatus>;
    getIdentifiers?: EntityGetter<SecurityIdentifier[]>;
    transferRestrictionsCountGet?: EntityGetter<ActiveTransferRestrictions<CountTransferRestriction>>;
    transferRestrictionsPercentageGet?: EntityGetter<ActiveTransferRestrictions<PercentageTransferRestriction>>;
    corporateActionsGetAgents?: EntityGetter<Identity[]>;
    corporateActionsGetDefaultConfig?: EntityGetter<CorporateActionDefaultConfig>;
    permissionsGetAgents?: EntityGetter<AgentWithGroup[]>;
    permissionsGetGroups?: EntityGetter<PermissionGroups>;
    complianceRequirementsGet?: EntityGetter<ComplianceRequirements>;
    checkpointsGetOne?: EntityGetter<Checkpoint>;
    checkpointsSchedulesGetOne?: EntityGetter<ScheduleWithDetails>;
}
interface AuthorizationRequestOptions extends EntityOptions {
    authId?: BigNumber;
    target?: Signer;
    issuer?: Identity;
    expiry?: Date | null;
    data?: Authorization;
    isExpired?: EntityGetter<boolean>;
}
interface AccountOptions extends EntityOptions {
    address?: string;
    key?: string;
    isFrozen?: EntityGetter<boolean>;
    getBalance?: EntityGetter<AccountBalance>;
    getIdentity?: EntityGetter<Identity | null>;
    getTransactionHistory?: EntityGetter<ExtrinsicData[]>;
    hasPermissions?: EntityGetter<boolean>;
    checkPermissions?: EntityGetter<CheckPermissionsResult<SignerType.Account>>;
}
interface SubsidyOptions extends EntityOptions {
    beneficiary?: string;
    subsidizer?: string;
    getAllowance?: EntityGetter<BigNumber>;
}
interface VenueOptions extends EntityOptions {
    id?: BigNumber;
    details?: EntityGetter<VenueDetails>;
}
interface NumberedPortfolioOptions extends EntityOptions {
    did?: string;
    id?: BigNumber;
    isOwnedBy?: EntityGetter<boolean>;
    getAssetBalances?: EntityGetter<PortfolioBalance[]>;
    getCustodian?: EntityGetter<Identity>;
    isCustodiedBy?: EntityGetter<boolean>;
}
interface DefaultPortfolioOptions extends EntityOptions {
    did?: string;
    isOwnedBy?: EntityGetter<boolean>;
    getAssetBalances?: EntityGetter<PortfolioBalance[]>;
    getCustodian?: EntityGetter<Identity>;
    isCustodiedBy?: EntityGetter<boolean>;
}
interface CustomPermissionGroupOptions extends EntityOptions {
    ticker?: string;
    id?: BigNumber;
    getPermissions?: EntityGetter<GroupPermissions>;
}
interface KnownPermissionGroupOptions extends EntityOptions {
    ticker?: string;
    type?: PermissionGroupType;
    getPermissions?: EntityGetter<GroupPermissions>;
}
interface InstructionOptions extends EntityOptions {
    id?: BigNumber;
    details?: EntityGetter<InstructionDetails>;
    getLegs?: EntityGetter<ResultSet<Leg>>;
    isPending?: EntityGetter<boolean>;
}
interface OfferingOptions extends EntityOptions {
    id?: BigNumber;
    ticker?: string;
    details?: EntityGetter<OfferingDetails>;
}
interface CheckpointOptions extends EntityOptions {
    id?: BigNumber;
    ticker?: string;
    createdAt?: EntityGetter<Date>;
    totalSupply?: EntityGetter<BigNumber>;
    allBalances?: EntityGetter<ResultSet<IdentityBalance>>;
    balance?: EntityGetter<BigNumber>;
}
interface CheckpointScheduleOptions extends EntityOptions {
    id?: BigNumber;
    ticker?: string;
    start?: Date;
    period?: CalendarPeriod | null;
    expiryDate?: Date | null;
    complexity?: BigNumber;
    details?: EntityGetter<ScheduleDetails>;
}
interface CorporateActionOptions extends EntityOptions {
    id?: BigNumber;
    ticker?: string;
    kind?: CorporateActionKind;
    declarationDate?: Date;
    description?: string;
    targets?: CorporateActionTargets;
    defaultTaxWithholding?: BigNumber;
    taxWithholdings?: TaxWithholding[];
}
interface DividendDistributionOptions extends EntityOptions {
    id?: BigNumber;
    ticker?: string;
    kind?: CorporateActionKind.PredictableBenefit | CorporateActionKind.UnpredictableBenefit;
    declarationDate?: Date;
    description?: string;
    targets?: CorporateActionTargets;
    defaultTaxWithholding?: BigNumber;
    taxWithholdings?: TaxWithholding[];
    origin?: DefaultPortfolio | NumberedPortfolio;
    currency?: string;
    perShare?: BigNumber;
    maxAmount?: BigNumber;
    expiryDate?: null | Date;
    paymentDate?: Date;
    checkpoint?: EntityGetter<Checkpoint | CheckpointSchedule>;
    details?: EntityGetter<DividendDistributionDetails>;
    getParticipant?: EntityGetter<DistributionParticipant | null>;
}
declare type MockOptions = {
    identityOptions?: IdentityOptions;
    accountOptions?: AccountOptions;
    subsidyOptions?: SubsidyOptions;
    tickerReservationOptions?: TickerReservationOptions;
    assetOptions?: AssetOptions;
    authorizationRequestOptions?: AuthorizationRequestOptions;
    venueOptions?: VenueOptions;
    instructionOptions?: InstructionOptions;
    numberedPortfolioOptions?: NumberedPortfolioOptions;
    defaultPortfolioOptions?: DefaultPortfolioOptions;
    offeringOptions?: OfferingOptions;
    checkpointOptions?: CheckpointOptions;
    checkpointScheduleOptions?: CheckpointScheduleOptions;
    corporateActionOptions?: CorporateActionOptions;
    dividendDistributionOptions?: DividendDistributionOptions;
    customPermissionGroupOptions?: CustomPermissionGroupOptions;
    knownPermissionGroupOptions?: KnownPermissionGroupOptions;
};
export declare const mockIdentityModule: (path: string) => () => Record<string, unknown>;
export declare const mockAccountModule: (path: string) => () => Record<string, unknown>;
export declare const mockSubsidyModule: (path: string) => () => Record<string, unknown>;
export declare const mockTickerReservationModule: (path: string) => () => Record<string, unknown>;
export declare const mockAssetModule: (path: string) => () => Record<string, unknown>;
export declare const mockAuthorizationRequestModule: (path: string) => () => Record<string, unknown>;
export declare const mockVenueModule: (path: string) => () => Record<string, unknown>;
export declare const mockInstructionModule: (path: string) => () => Record<string, unknown>;
export declare const mockNumberedPortfolioModule: (path: string) => () => Record<string, unknown>;
export declare const mockDefaultPortfolioModule: (path: string) => () => Record<string, unknown>;
export declare const mockOfferingModule: (path: string) => () => Record<string, unknown>;
export declare const mockCheckpointModule: (path: string) => () => Record<string, unknown>;
export declare const mockCheckpointScheduleModule: (path: string) => () => Record<string, unknown>;
export declare const mockCorporateActionModule: (path: string) => () => Record<string, unknown>;
export declare const mockDividendDistributionModule: (path: string) => () => Record<string, unknown>;
export declare const mockCustomPermissionGroupModule: (path: string) => () => Record<string, unknown>;
export declare const mockKnownPermissionGroupModule: (path: string) => () => Record<string, unknown>;
/**
 * @hidden
 *
 * Initialize mock classes with the default configuration
 */
export declare const initMocks: (opts?: MockOptions | undefined) => void;
/**
 * @hidden
 *s
 * Configure mock classes (calling .reset will go back to the default configuration)
 */
export declare const configureMocks: (opts?: MockOptions | undefined) => void;
/**
 * @hidden
 * Reset all mock classes to their default values
 */
export declare const reset: () => void;
/**
 * @hidden
 * Retrieve an Identity instance
 */
export declare const getIdentityInstance: (opts?: IdentityOptions | undefined) => MockIdentity;
/**
 * @hidden
 * Retrieve an Account instance
 */
export declare const getAccountInstance: (opts?: AccountOptions | undefined) => MockAccount;
/**
 * @hidden
 * Retrieve an Subsidy instance
 */
export declare const getSubsidyInstance: (opts?: SubsidyOptions | undefined) => MockSubsidy;
/**
 * @hidden
 * Retrieve a TickerReservation instance
 */
export declare const getTickerReservationInstance: (opts?: TickerReservationOptions | undefined) => MockTickerReservation;
/**
 * @hidden
 * Retrieve a Asset instance
 */
export declare const getAssetInstance: (opts?: AssetOptions | undefined) => MockAsset;
/**
 * @hidden
 * Retrieve an AuthorizationRequest instance
 */
export declare const getAuthorizationRequestInstance: (opts?: AuthorizationRequestOptions | undefined) => MockAuthorizationRequest;
/**
 * @hidden
 * Retrieve a Venue instance
 */
export declare const getVenueInstance: (opts?: VenueOptions | undefined) => MockVenue;
/**
 * @hidden
 * Retrieve a NumberedPortfolio instance
 */
export declare const getNumberedPortfolioInstance: (opts?: NumberedPortfolioOptions | undefined) => MockNumberedPortfolio;
/**
 * @hidden
 * Retrieve a DefaultPortfolio instance
 */
export declare const getDefaultPortfolioInstance: (opts?: DefaultPortfolioOptions | undefined) => MockDefaultPortfolio;
/**
 * @hidden
 * Retrieve a CustomPermissionGroup instance
 */
export declare const getCustomPermissionGroupInstance: (opts?: CustomPermissionGroupOptions | undefined) => MockCustomPermissionGroup;
/**
 * @hidden
 * Retrieve a KnownPermissionGroup instance
 */
export declare const getKnownPermissionGroupInstance: (opts?: KnownPermissionGroupOptions | undefined) => MockKnownPermissionGroup;
/**
 * @hidden
 * Retrieve an Instruction instance
 */
export declare const getInstructionInstance: (opts?: InstructionOptions | undefined) => MockInstruction;
/**
 * @hidden
 * Retrieve an Offering instance
 */
export declare const getOfferingInstance: (opts?: OfferingOptions | undefined) => MockOffering;
/**
 * @hidden
 * Retrieve a Checkpoint instance
 */
export declare const getCheckpointInstance: (opts?: CheckpointOptions | undefined) => MockCheckpoint;
/**
 * @hidden
 * Retrieve a CheckpointSchedule instance
 */
export declare const getCheckpointScheduleInstance: (opts?: CheckpointScheduleOptions | undefined) => MockCheckpointSchedule;
/**
 * @hidden
 * Retrieve a CorporateAction instance
 */
export declare const getCorporateActionInstance: (opts?: CorporateActionOptions | undefined) => MockCorporateAction;
/**
 * @hidden
 * Retrieve a DividendDistribution instance
 */
export declare const getDividendDistributionInstance: (opts?: DividendDistributionOptions | undefined) => MockDividendDistribution;
export {};
//# sourceMappingURL=entities.d.ts.map