import type { AnyModelSchema, IModelEntityMetadata } from '@declaro/core';
import type { IRepository } from '../../../domain/interfaces/repository';
import type { IPaginationInput } from '../../../domain/models/pagination';
import type { InferDetail, InferFilters, InferInput, InferLookup, InferSearchResults, InferSummary } from '../../../shared/utils/schema-inference';
export interface IMockMemoryRepositoryArgs<TSchema extends AnyModelSchema> {
    schema: TSchema;
}
export declare class MockMemoryRepository<TSchema extends AnyModelSchema> implements IRepository<TSchema> {
    protected args: IMockMemoryRepositoryArgs<TSchema>;
    protected data: Map<string, InferDetail<TSchema>>;
    protected trash: Map<string, InferDetail<TSchema>>;
    protected entityMetadata: IModelEntityMetadata<any>;
    protected nextId: number;
    constructor(args: IMockMemoryRepositoryArgs<TSchema>);
    load(input: InferLookup<TSchema>): Promise<InferDetail<TSchema>>;
    loadMany(inputs: InferLookup<TSchema>[]): Promise<InferDetail<TSchema>[]>;
    search(input: InferFilters<TSchema>, pagination?: IPaginationInput): Promise<InferSearchResults<TSchema>>;
    remove(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
    restore(lookup: InferLookup<TSchema>): Promise<InferSummary<TSchema>>;
    create(input: InferInput<TSchema>): Promise<InferDetail<TSchema>>;
    update(lookup: InferLookup<TSchema>, input: InferInput<TSchema>): Promise<InferDetail<TSchema>>;
    protected generatePrimaryKey(): Promise<string | number>;
}
