import { ApolloClient, LazyQueryHookOptions, NormalizedCacheObject } from '@apollo/client';
import { IBaseService } from '../types/base-service';
import { ValueOf } from '../types/common';
import { IMethods } from '../types/methods';
import { ApolloBaseService } from './apollo-base-service';
import { ApolloService } from './apollo-service';
type Options = {
    create: {
        createKey?: string;
        responseKey?: string;
    };
};
export declare class BaseService<Documents extends IMethods.IDocuments, HasManyModels extends IMethods.Relationship.HasManyModels, HasOneModels extends IMethods.Relationship.HasOneModels> extends ApolloBaseService {
    documents: Documents;
    apolloService: ApolloService;
    private modelName;
    private options;
    private relationship;
    constructor({ documents, modelName, relationship, options, apolloClient, apolloService, }: {
        apolloClient: ApolloClient<NormalizedCacheObject>;
        apolloService?: ApolloService;
        documents: Documents;
        modelName: string;
        options?: Options;
        relationship?: IBaseService.Relationship<HasManyModels>;
    });
    create: (input: ValueOf<IBaseService.VariablesOf<Documents['create']>['input']> & Partial<HasManyModels> & Partial<HasOneModels>, options?: IBaseService.CacheUpdateOptions<Omit<IBaseService.MutationOptionsWithoutMutation<Documents['create']>, 'variables'>>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["create"]>["createOne"]>;
    useCreate: (options?: IBaseService.CacheUpdateOptions<IBaseService.MutationHookOption<Documents['create']>>) => [(input: ValueOf<IBaseService.VariablesOf<Documents['create']>['input']> & Partial<HasManyModels> & Partial<HasOneModels>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["create"]>["createOne"]>, import("@apollo/client").MutationResult<IMethods.Create.Result>];
    delete: (id: string, options?: Omit<IBaseService.MutationOptionsWithoutMutation<Documents['delete']>, 'variables'>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["delete"]>["deleteOne"]>;
    useDelete: (options?: IBaseService.MutationHookOption<Documents['delete']>) => [(id?: string) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["delete"]>["deleteOne"]>, import("@apollo/client").MutationResult<import("@graphql-typed-document-node/core").ResultOf<Documents["delete"]>>];
    get: (id: string, options?: Omit<IBaseService.QueryOptionsWithoutQuery<Documents['get']>, 'variables'>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["get"]>["get"]>;
    useGet: (options?: IBaseService.QueryHookOption<Documents['get']>) => import("@apollo/client").QueryResult<import("@graphql-typed-document-node/core").ResultOf<Documents["get"]>, import("@graphql-typed-document-node/core").VariablesOf<Documents["get"]>>;
    useLazyGet: (options?: IBaseService.QueryHookOption<Documents['get']>) => import("@apollo/client").LazyQueryResultTuple<import("@graphql-typed-document-node/core").ResultOf<Documents["get"]>, import("@graphql-typed-document-node/core").VariablesOf<Documents["get"]>>;
    list: (variables: IBaseService.VariablesOf<Documents['list']>, options?: IBaseService.CacheUpdateOptions<IBaseService.QueryHookOption<Documents['list']>>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["list"]>["list"]>;
    useList: (options?: IBaseService.CacheUpdateOptions<IBaseService.QueryHookOption<Documents['list']>>) => import("@apollo/client").QueryResult<import("@graphql-typed-document-node/core").ResultOf<Documents["list"]>, import("@graphql-typed-document-node/core").VariablesOf<Documents["list"]>>;
    useListLazy: (options?: IBaseService.CacheUpdateOptions<LazyQueryHookOptions<IBaseService.ResultOf<Documents['list']>, IBaseService.VariablesOf<Documents['list']>>>) => import("@apollo/client").LazyQueryResultTuple<import("@graphql-typed-document-node/core").ResultOf<Documents["list"]>, import("@graphql-typed-document-node/core").VariablesOf<Documents["list"]>>;
    update: (input: IBaseService.VariablesOf<Documents['update']>['input']['update'] & {
        id: string;
    } & Partial<HasManyModels> & Partial<HasOneModels>, options?: IBaseService.CacheUpdateOptions<Omit<IBaseService.MutationHookOption<Documents['update']>, 'variables'>>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["get"]>["get"] | import("@graphql-typed-document-node/core").ResultOf<Documents["update"]>["updateOne"]>;
    useUpdate: (options?: IBaseService.CacheUpdateOptions<IBaseService.MutationHookOption<Documents['update']>>) => [(input: IBaseService.VariablesOf<Documents['update']>['input']['update'] & {
        id: string;
    } & Partial<HasManyModels> & Partial<HasOneModels>) => Promise<import("@graphql-typed-document-node/core").ResultOf<Documents["get"]>["get"] | import("@graphql-typed-document-node/core").ResultOf<Documents["update"]>["updateOne"]>, import("@apollo/client").MutationResult<import("@graphql-typed-document-node/core").ResultOf<Documents["update"]>>];
    private _serializeCreate;
    getOptionsUpdate<T extends Documents['update'] | Documents['create']>(options: IBaseService.CacheUpdateOptions<IBaseService.MutationHookOption<T>>): (oldModel?: any) => (typeof options)['update'];
    optionsOnCompleted(options: IBaseService.CacheUpdateOptions<IBaseService.QueryHookOption<Documents['list']>>): (typeof options)['onCompleted'];
}
export {};
