import { AddCountTransferRestrictionParams, AddPercentageTransferRestrictionParams, Asset, Context, Namespace, SetCountTransferRestrictionsParams, SetPercentageTransferRestrictionsParams } from "../../../../internal";
import { ActiveTransferRestrictions, CountTransferRestriction, NoArgsProcedureMethod, PercentageTransferRestriction, ProcedureMethod, TransferRestrictionType } from "../../../../types";
declare type AddRestrictionParams<T> = Omit<T extends TransferRestrictionType.Count ? AddCountTransferRestrictionParams : AddPercentageTransferRestrictionParams, 'type'>;
declare type SetRestrictionsParams<T> = Omit<T extends TransferRestrictionType.Count ? SetCountTransferRestrictionsParams : SetPercentageTransferRestrictionsParams, 'type'>;
declare type GetReturnType<T> = ActiveTransferRestrictions<T extends TransferRestrictionType.Count ? CountTransferRestriction : PercentageTransferRestriction>;
/**
 * Base class for managing Transfer Restrictions
 */
export declare abstract class TransferRestrictionBase<T extends TransferRestrictionType> extends Namespace<Asset> {
    protected abstract type: T;
    /**
     * @hidden
     */
    constructor(parent: Asset, context: Context);
    /**
     * Add a Transfer Restriction of the corresponding type to this Asset
     *
     * @note the result is the total amount of restrictions after the procedure has run
     */
    addRestriction: ProcedureMethod<AddRestrictionParams<T>, number>;
    /**
     * Sets all Transfer Restrictions of the corresponding type on this Asset
     *
     * @note the result is the total amount of restrictions after the procedure has run
     */
    setRestrictions: ProcedureMethod<SetRestrictionsParams<T>, number>;
    /**
     * Removes all Transfer Restrictions of the corresponding type from this Asset
     *
     * @note the result is the total amount of restrictions after the procedure has run
     */
    removeRestrictions: NoArgsProcedureMethod<number>;
    /**
     * Retrieve all active Transfer Restrictions of the corresponding type
     *
     * @note there is a maximum number of restrictions allowed across all types.
     *   The `availableSlots` property of the result represents how many more restrictions can be added
     *   before reaching that limit
     */
    get(): Promise<GetReturnType<T>>;
}
export {};
//# sourceMappingURL=TransferRestrictionBase.d.ts.map