import { FutureAwareContainer, IFutureModel } from '../models/future/future-types';
/**
 * Core Future handler interface - minimal requirement for @kosFuture methods
 */
export interface FutureHandlerContainer<T extends object = Record<string, unknown>> {
    futureHandler: FutureAwareContainer<T>;
}
/**
 * Future state getters interface - for accessing Future progress/status
 * This is what external consumers typically need
 */
export interface FutureStateAccessor<T extends Record<string, any> = Record<string, any>> {
    readonly future?: IFutureModel<T>;
    readonly progress: number;
    readonly status: string;
    readonly isRunning: boolean;
    readonly isCancelled: boolean;
}
/**
 * Future control interface - for canceling operations
 */
export interface FutureController {
    cancelFuture(): Promise<void>;
}
/**
 * Future update callback interface - for models that need custom behavior
 * This can be separated from the core container if not all models need it
 */
export interface FutureUpdateHandler<T extends Record<string, any> = Record<string, any>> {
    onFutureUpdate?(future: IFutureModel<T>): void;
}
/**
 * Complete Future container - combines all interfaces
 * Use this when you need everything internally
 */
export interface CompleteFutureContainer<T extends Record<string, any> = Record<string, any>> extends FutureHandlerContainer<T>, FutureStateAccessor<T>, FutureController, FutureUpdateHandler<T> {
}
/**
 * External Future interface - what external consumers typically need
 * This is perfect for PublicModelInterface usage
 */
export interface ExternalFutureInterface<T extends Record<string, any> = Record<string, any>> extends FutureStateAccessor<T>, FutureController {
}
/**
 * Type helper for adding Future support to existing model interfaces
 * Usage: export type MyModel = PublicModelInterface<MyModelImpl> & ExternalFutureInterface;
 */
export type WithFutureSupport<T> = T & ExternalFutureInterface;
/**
 * Type helper for internal model implementations that need minimal Future support
 * Usage: export class MyModelImpl implements IKosDataModel, InternalFutureContainer
 */
export type InternalFutureContainer<T extends object = Record<string, unknown>> = FutureHandlerContainer<T> & Partial<FutureStateAccessor & FutureController>;
//# sourceMappingURL=future-interfaces.d.ts.map