import BigNumber from 'bignumber.js';
import { Asset, Context, Entity, InvestInOfferingParams, ModifyStoTimesParams } from "../../../internal";
import { NoArgsProcedureMethod, ProcedureMethod, ResultSet, SubCallback, UnsubCallback } from "../../../types";
import { Investment, OfferingDetails } from './types';
export interface UniqueIdentifiers {
    id: BigNumber;
    ticker: string;
}
interface HumanReadable {
    id: string;
    ticker: string;
}
/**
 * Represents an Asset Offering in the Polymesh blockchain
 */
export declare class Offering extends Entity<UniqueIdentifiers, HumanReadable> {
    /**
     * @hidden
     * Check if a value is of type [[UniqueIdentifiers]]
     */
    static isUniqueIdentifiers(identifier: unknown): identifier is UniqueIdentifiers;
    /**
     * identifier number of the Offering
     */
    id: BigNumber;
    /**
     * Asset being offered
     */
    asset: Asset;
    /**
     * @hidden
     */
    constructor(identifiers: UniqueIdentifiers, context: Context);
    /**
     * Retrieve the Offering's details
     *
     * @note can be subscribed to
     */
    details(): Promise<OfferingDetails>;
    details(callback: SubCallback<OfferingDetails>): Promise<UnsubCallback>;
    /**
     * Close the Offering
     */
    close: NoArgsProcedureMethod<void>;
    /**
     * Freeze the Offering
     */
    freeze: NoArgsProcedureMethod<Offering>;
    /**
     * Unfreeze the Offering
     */
    unfreeze: NoArgsProcedureMethod<Offering>;
    /**
     * Modify the start/end time of the Offering
     *
     * @throws if:
     *   - Trying to modify the start time on an Offering that already started
     *   - Trying to modify anything on an Offering that already ended
     *   - Trying to change start or end time to a past date
     */
    modifyTimes: ProcedureMethod<ModifyStoTimesParams, void>;
    /**
     * Invest in the Offering
     *
     * @note required roles:
     *   - Purchase Portfolio Custodian
     *   - Funding Portfolio Custodian
     */
    invest: ProcedureMethod<InvestInOfferingParams, void>;
    /**
     * Retrieve all investments made on this Offering
     *
     * @param opts.size - page size
     * @param opts.start - page offset
     *
     * @note supports pagination
     * @note uses the middleware
     */
    getInvestments(opts?: {
        size?: number;
        start?: number;
    }): Promise<ResultSet<Investment>>;
    /**
     * Determine whether this Offering exists on chain
     */
    exists(): Promise<boolean>;
    /**
     * Return the Offering's ID and Asset ticker
     */
    toJson(): HumanReadable;
}
export {};
//# sourceMappingURL=index.d.ts.map