/**
 * Query Builder
 *
 * Builder fluido para construir queries de Firestore de manera legible.
 * Alternativa más expresiva a pasar objetos QueryOptions directamente.
 */
import { OrderDirection, QueryOptions, WhereOperator } from '../types';
/**
 * Builder fluido para queries de Firestore.
 *
 * @example
 * ```typescript
 * // Construir query con builder
 * const options = new QueryBuilder()
 *   .where('status', '==', 'active')
 *   .where('age', '>=', 18)
 *   .orderBy('createdAt', 'desc')
 *   .limit(10)
 *   .build();
 *
 * // Usar con FirestoreService
 * const users = await firestoreService.getDocs<User>('users', options);
 *
 * // O con método estático
 * const options2 = QueryBuilder.create()
 *   .where('category', '==', 'electronics')
 *   .orderBy('price', 'asc')
 *   .build();
 * ```
 */
export declare class QueryBuilder {
    private whereConditions;
    private orderByConditions;
    private limitValue?;
    private startAfterValue?;
    private startAtValue?;
    private endBeforeValue?;
    private endAtValue?;
    /**
     * Crea una nueva instancia del builder (método estático alternativo).
     */
    static create(): QueryBuilder;
    /**
     * Agrega una condición where.
     *
     * @param field - Campo a filtrar
     * @param operator - Operador de comparación
     * @param value - Valor a comparar
     *
     * @example
     * ```typescript
     * builder.where('status', '==', 'active')
     * builder.where('price', '>=', 100)
     * builder.where('tags', 'array-contains', 'featured')
     * builder.where('category', 'in', ['electronics', 'books'])
     * ```
     */
    where(field: string, operator: WhereOperator, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '=='.
     *
     * @example
     * ```typescript
     * builder.whereEquals('status', 'active')
     * // equivalente a: builder.where('status', '==', 'active')
     * ```
     */
    whereEquals(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '!='.
     */
    whereNotEquals(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '>'.
     */
    whereGreaterThan(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '>='.
     */
    whereGreaterOrEqual(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '<'.
     */
    whereLessThan(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador '<='.
     */
    whereLessOrEqual(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador 'array-contains'.
     *
     * @example
     * ```typescript
     * builder.whereArrayContains('tags', 'featured')
     * ```
     */
    whereArrayContains(field: string, value: unknown): QueryBuilder;
    /**
     * Shortcut para where con operador 'array-contains-any'.
     *
     * @example
     * ```typescript
     * builder.whereArrayContainsAny('tags', ['featured', 'new'])
     * ```
     */
    whereArrayContainsAny(field: string, values: unknown[]): QueryBuilder;
    /**
     * Shortcut para where con operador 'in'.
     *
     * @example
     * ```typescript
     * builder.whereIn('status', ['active', 'pending'])
     * ```
     */
    whereIn(field: string, values: unknown[]): QueryBuilder;
    /**
     * Shortcut para where con operador 'not-in'.
     */
    whereNotIn(field: string, values: unknown[]): QueryBuilder;
    /**
     * Agrega ordenamiento por un campo.
     *
     * @param field - Campo por el cual ordenar
     * @param direction - Dirección: 'asc' o 'desc' (default: 'asc')
     *
     * @example
     * ```typescript
     * builder.orderBy('createdAt', 'desc')
     * builder.orderBy('name') // asc por defecto
     * ```
     */
    orderBy(field: string, direction?: OrderDirection): QueryBuilder;
    /**
     * Shortcut para orderBy descendente.
     */
    orderByDesc(field: string): QueryBuilder;
    /**
     * Shortcut para orderBy ascendente.
     */
    orderByAsc(field: string): QueryBuilder;
    /**
     * Limita el número de resultados.
     *
     * @param count - Número máximo de documentos
     *
     * @example
     * ```typescript
     * builder.limit(10)
     * ```
     */
    limit(count: number): QueryBuilder;
    /**
     * Cursor para paginación: empezar después de un documento.
     *
     * @param cursor - Documento o snapshot desde donde continuar
     *
     * @example
     * ```typescript
     * // Primera página
     * const page1 = await service.getPaginated('users', builder.limit(10).build());
     *
     * // Siguiente página
     * const page2 = await service.getPaginated('users',
     *   builder.startAfter(page1.lastDoc).limit(10).build()
     * );
     * ```
     */
    startAfter(cursor: unknown): QueryBuilder;
    /**
     * Cursor para paginación: empezar en un documento.
     */
    startAt(cursor: unknown): QueryBuilder;
    /**
     * Cursor para paginación: terminar antes de un documento.
     */
    endBefore(cursor: unknown): QueryBuilder;
    /**
     * Cursor para paginación: terminar en un documento.
     */
    endAt(cursor: unknown): QueryBuilder;
    /**
     * Construye el objeto QueryOptions.
     *
     * @returns QueryOptions para usar con FirestoreService
     */
    build(): QueryOptions;
    /**
     * Resetea el builder para reutilización.
     */
    reset(): QueryBuilder;
    /**
     * Clona el builder actual.
     */
    clone(): QueryBuilder;
}
/**
 * Función helper para crear un QueryBuilder.
 *
 * @example
 * ```typescript
 * import { query } from 'valtech-components';
 *
 * const options = query()
 *   .where('status', '==', 'active')
 *   .orderBy('createdAt', 'desc')
 *   .limit(10)
 *   .build();
 * ```
 */
export declare function query(): QueryBuilder;
