import { IFutureContainerModel, IFutureContainerModelOptions } from './future-container-types';
import { IFutureModel } from '../future';
import { ApiCallback } from '../../../common';
import { FutureRequest, FutureResponse } from '../../services/future';
import { KosCreationContext } from '../../../core';

/**
 * @category future
 * @name FutureContainerModel
 * @version 1.0.0
 * @author Matthew Holman <maholman@coca-cola.com>
 * @internal
 * Represents a list of Future
 */
declare class FutureContainerModel implements IFutureContainerModel {
    id: string;
    private logger;
    private _deleteFuture;
    private _addFuture;
    private _futures;
    createModel: <T = void>(request: FutureRequest) => Promise<T>;
    deleteModel: (id: string) => Promise<void>;
    constructor(modelId: string, options: IFutureContainerModelOptions, context: KosCreationContext);
    /**
     * @category Computed
     * @getter
     * Computed value that will recalculate automatically whenever Futures
     * are added or removed from the map.
     *
     * @returns the list of Futures
     *
     * @internal
     */
    get futures(): IFutureModel<Record<string, unknown>>[];
    get models(): IFutureModel<Record<string, unknown>>[];
    /**
     * Convenience function that will retrieve the IFutureModel based on
     * the id.
     *
     * @param futureId - the id of the future to be retrieved
     * @returns the `IFutureModel` or `undefined` if not available in the list
     * @internal
     */
    getFuture(futureId: string): IFutureModel<Record<string, unknown>> | undefined;
    /**
     * @category Action
     * Internally adds the provided Future to the map
     *
     * @param group - The Future model to add
     * @internal
     */
    addFutureModel(model: IFutureModel): void;
    /**
     * @category Action
     * Internally adds the provided Future to the map
     *
     * @param group - The Future model to add
     * @internal
     */
    removeFutureModel(id: string): void;
    /**
     * This is the entry point which enables an this model to be “visited” by a visitor object.
     *
     * @remarks
     * Futures as part of a KOS Model Visitor pattern allowing clients
     * to traverse the KOS Model hierarchy and perform operations on elements
     * as they are "visited".
     *
     * Ths method serves as an entry point for visitors allowing them to dispatch
     * actions on elements in a collection without requiring the models to have
     * explicit knowledge of the operation being performed.
     *
     * @group KOS Model
     * @internal
     */
    /**
     * Gets the direct children of this Future collection.
     *
     * @remarks
     * Allows the KOS Model framework to operate off of a directed graph
     * and perform generic operations on collections of models by traversing
     * the hierarchy.
     *
     * This method will inform the framework of what child models exist in a containment
     * relationship.
     *
     * @returns - the collection of Future models maintained by this model.
     * @group KOS Model
     * @internal
     */
    /**
     * Removes a Future model from the collection.
     *
     * @remarks
     * If a remove service function was passed in as part of the options
     * in the constructor then it will be used.  Otherwise the default
     * delete service will be invoked.
     *
     * @param id - the id of the Future to be removed
     *
     * @see deleteFutureService
     * @category Action
     * @internal
     */
    removeFuture(id: string): Promise<void>;
    /**
     * Adds a Future model into the collection.
     *
     * @remarks
     * If an add service function was passed in as part of the options
     * in the constructor then it will be used.  Otherwise the default
     * add service will be invoked.
     *
     * @param model - the Future model to be added
     *
     * @see addFutureService
     * @category Action
     * @internal
     */
    createFuture(model: FutureRequest): Promise<any>;
    handleFutureUpdated(future: FutureResponse, payload: ApiCallback): void;
}
export default FutureContainerModel;
//# sourceMappingURL=future-container-model.d.ts.map