/**
 * Firestore Vector Search 타입 정의
 * firebase-admin v11은 findNearest를 타입에 포함하지 않으므로
 * @google-cloud/firestore의 벡터 검색 타입을 augmentation
 */
import { CollectionReference, Query, QuerySnapshot } from '@google-cloud/firestore';

interface VectorQueryOptions {
    vectorField: string;
    queryVector: number[];
    limit: number;
    distanceMeasure: 'COSINE' | 'EUCLIDEAN' | 'DOT_PRODUCT';
    distanceResultField?: string;
    distanceThreshold?: number;
}

interface VectorQuery<T = FirebaseFirestore.DocumentData> {
    get(): Promise<QuerySnapshot<T>>;
}

declare module '@google-cloud/firestore' {
    interface CollectionReference<T = FirebaseFirestore.DocumentData> {
        findNearest(options: VectorQueryOptions): VectorQuery<T>;
    }
    interface Query<T = FirebaseFirestore.DocumentData> {
        findNearest(options: VectorQueryOptions): VectorQuery<T>;
    }
}
