import type { QuerySnapshot, WriteBatch, DocumentData, SetOptions, DocumentReference, Transaction, CollectionReference, Settings as FirestoreSettings } from '@firebase/firestore-types';
import { AbstractFirestoreApi, QueryBuilder } from '../../ngx/db';
export declare class FirestoreCloudService extends AbstractFirestoreApi {
    private db;
    private admin;
    private static instance;
    static getInstance(admin: any, settings?: FirestoreSettings): FirestoreCloudService;
    initialize(admin: any, settings: FirestoreSettings): void;
    collection<T = any>(collection: string, qb?: QueryBuilder): Promise<T[]>;
    collectionGroup<T = any>(collectionId: string, qb?: QueryBuilder): Promise<T[]>;
    doc<T = any>(path: string): Promise<T>;
    upsert(collection: string, data: {
        [key: string]: any;
    }, opts?: SetOptions): Promise<any>;
    update(path: string, data: {
        [key: string]: any;
    }): Promise<void>;
    delete(path: string): Promise<void>;
    /**
     * Bulk update data
     */
    bulkUpsert(path: string, data: DocumentData[] | {
        data: DocumentData;
        qb?: QueryBuilder;
    }, opts?: SetOptions): Promise<string[]>;
    /**
     * Bulk delete data
     */
    bulkDelete(collection: string, qb?: QueryBuilder, maxSize?: number): Promise<any[]>;
    get batch(): WriteBatch;
    get serverTimestamp(): any;
    increment(n?: number): any;
    /**
     * Returns a generated Firestore Document Id.
     */
    createId(colPath?: string): string;
    runTransaction(updateFunction: (transaction: Transaction) => Promise<unknown>): Promise<unknown>;
    recursiveDelete(ref: CollectionReference<unknown> | DocumentReference<unknown>, bulkWriter?: any): any;
    /**
     * Create a Firestore Timestamp
     *
     * @param date
     */
    createTimestamp(date?: Date): any;
    collectionSnapshot(path: string, qb?: QueryBuilder): Promise<QuerySnapshot>;
    collectionGroupSnapshot(collectionId: string, qb?: QueryBuilder): Promise<QuerySnapshot>;
    docRef(path: string): DocumentReference<DocumentData>;
}
