import { IEnumerable, IQueryable, IAsyncEnumerable } from '../../collections';
import { PrismaSelectResult, PrismaIncludeResult } from './prisma-types';
export declare class PrismaUnifiedBuilder<TModel = unknown, TSelect = TModel, TWhereInput = any, TOrderByInput = any, TInclude = any, TSelectInput = any, TCreateInput = any, TUpdateInput = any, TWhereUniqueInput = any, TExpectedResult = Record<string, any>> {
    private readonly queryBuilder;
    private readonly mutationBuilder;
    constructor(prismaModel: any, modelName?: string);
    factory: () => PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, TExpectedResult>;
    Where(where: TWhereInput): this;
    Select<TExpectedType = any>(select: TSelectInput): PrismaUnifiedBuilder<TModel, TExpectedType, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, TExpectedType>;
    Select<TSelectFields extends TSelectInput>(select: TSelectFields): PrismaUnifiedBuilder<TModel, PrismaSelectResult<TModel, TSelectFields, any>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, any>;
    Select<TSelectFields extends TSelectInput, TNewExpectedResult = TExpectedResult>(select: TSelectFields, expectedResult: TNewExpectedResult): PrismaUnifiedBuilder<TModel, PrismaSelectResult<TModel, TSelectFields, TNewExpectedResult>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, TNewExpectedResult>;
    SelectAs<TSelectFields extends TSelectInput>(select: TSelectFields): UnifiedTypedSelector<TModel, TSelectFields, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Include<TIncludeFields extends TInclude, TNewExpectedResult = TExpectedResult>(include: TIncludeFields, expectedResult?: TNewExpectedResult): PrismaUnifiedBuilder<TModel, PrismaIncludeResult<TSelect, TIncludeFields, TNewExpectedResult>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, TNewExpectedResult>;
    OrderBy(orderBy: TOrderByInput): this;
    Take(n: number): this;
    Skip(n: number): this;
    ToEnumerable(): Promise<IEnumerable<TSelect>>;
    ToArray(): Promise<TSelect[]>;
    First(): Promise<TSelect | null>;
    FirstOrDefault(): Promise<TSelect | undefined>;
    Single(): Promise<TSelect | null>;
    Count(): Promise<number>;
    Exists(): Promise<boolean>;
    Any(): Promise<boolean>;
    Min(field: string): Promise<any>;
    Max(field: string): Promise<any>;
    Sum(field: string): Promise<number>;
    Avg(field: string): Promise<number>;
    Project<TResult>(selector: (item: TSelect) => TResult): Promise<IEnumerable<TResult>>;
    ToAsyncEnumerable(): Promise<IAsyncEnumerable<TSelect>>;
    AsAsyncEnumerable(): Promise<IAsyncEnumerable<TSelect>>;
    AsEnumerable(): Promise<IEnumerable<TSelect>>;
    ToEnumerableAsync(): Promise<IEnumerable<TSelect>>;
    ToArrayAsync(): Promise<TSelect[]>;
    Create(data: TCreateInput): Promise<TModel>;
    CreateMany(data: TCreateInput[]): Promise<{
        count: number;
    }>;
    Update(where: TWhereUniqueInput, data: TUpdateInput): Promise<TModel>;
    UpdateMany(where: TWhereInput, data: TUpdateInput): Promise<{
        count: number;
    }>;
    Delete(where: TWhereUniqueInput): Promise<TModel>;
    DeleteMany(where: TWhereInput): Promise<{
        count: number;
    }>;
    BulkUpsert(records: Array<{
        where: TWhereUniqueInput;
        create: TCreateInput;
        update: TUpdateInput;
    }>): Promise<TModel[]>;
    Transaction<T>(operation: (builder: PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>) => Promise<T>): Promise<T>;
    private getPrismaClient;
    private getModelName;
    AsQueryable(): IQueryable<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    ContextFactory(): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    Fresh(): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    New(): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereEquals(field: keyof TModel, value: string, caseSensitive?: boolean): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereContains(field: keyof TModel, value: string, caseSensitive?: boolean): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereStartsWith(field: keyof TModel, value: string, caseSensitive?: boolean): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereEndsWith(field: keyof TModel, value: string, caseSensitive?: boolean): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereIn(field: keyof TModel, values: any[]): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNotIn(field: keyof TModel, values: any[]): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereGreaterThan(field: keyof TModel, value: any): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereGreaterThanOrEqual(field: keyof TModel, value: any): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereLessThan(field: keyof TModel, value: any): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereLessThanOrEqual(field: keyof TModel, value: any): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereBetween(field: keyof TModel, min: any, max: any): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNull(field: keyof TModel): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
    WhereNotNull(field: keyof TModel): PrismaUnifiedBuilder<TModel, TSelect, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput>;
}
declare class UnifiedTypedSelector<TModel, TSelectFields, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput> {
    private builder;
    private select;
    constructor(builder: PrismaUnifiedBuilder<TModel, any, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, any>, select: TSelectFields);
    As<TExpectedResult>(): PrismaUnifiedBuilder<TModel, PrismaSelectResult<TModel, TSelectFields, TExpectedResult>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, TExpectedResult>;
    Inferred(): PrismaUnifiedBuilder<TModel, PrismaSelectResult<TModel, TSelectFields, any>, TWhereInput, TOrderByInput, TInclude, TSelectInput, TCreateInput, TUpdateInput, TWhereUniqueInput, any>;
}
export {};
