import { ODataHttpClient, ODataHttpClientConfig, ODataResponse } from "@odata2ts/http-client-api";
import { ODataCollectionResponseV2, ODataModelResponseV2 } from "@odata2ts/odata-core";
import { ODataQueryBuilderV2 } from "@odata2ts/odata-query-builder";
import { PrimitiveCollectionType, QueryObjectModel } from "@odata2ts/odata-query-objects";
import { ODataServiceOptions } from "../ODataServiceOptions";
import { ServiceStateHelperV2 } from "./ServiceStateHelperV2.js";
type PrimitiveExtractor<T> = T extends PrimitiveCollectionType<infer E> ? E : T;
export declare class CollectionServiceV2<in out ClientType extends ODataHttpClient, T, Q extends QueryObjectModel, EditableT = PrimitiveExtractor<T>> {
    protected readonly __base: ServiceStateHelperV2<ClientType, Q>;
    constructor(client: ClientType, basePath: string, name: string, qModel: Q, options?: ODataServiceOptions);
    getPath(): string;
    /**
     * Add a new item to the collection.
     *
     * @param model primitive value
     * @param requestConfig
     */
    add(model: EditableT, requestConfig?: ODataHttpClientConfig<ClientType>): ODataResponse<ODataModelResponseV2<T>>;
    /**
     * Update the whole collection.
     *
     * @param models set of primitive values
     * @param requestConfig
     */
    update(models: Array<EditableT>, requestConfig?: ODataHttpClientConfig<ClientType>): ODataResponse<void>;
    /**
     * Delete the whole collection.
     */
    delete(requestConfig?: ODataHttpClientConfig<ClientType>): ODataResponse<void>;
    /**
     * Query collection.
     */
    query<ReturnType = T>(queryFn?: (builder: ODataQueryBuilderV2<Q>, qObject: Q) => void, requestConfig?: ODataHttpClientConfig<ClientType>): ODataResponse<ODataCollectionResponseV2<ReturnType>>;
}
export {};
