import { AxiosInstance } from 'axios';
export type IDefaultParams = Record<string, number | number[] | string | string[] | boolean | Date | undefined>;
export type IDefaultHeaders = Record<string, string>;
export interface IDefaultOptions<IParams, IHeaders> {
    endpoint: string;
    params?: IParams;
    headers?: IHeaders;
    shouldIncludeHeadersInResponse?: true;
}
export interface IIndexOptions<IBody, IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    body?: IBody;
}
export interface IShowOptions<IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    id: string;
}
export interface IStoreOptions<IBody, IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    body: IBody;
}
export interface IUpdateOptions<IBody, IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    id: string;
    body: IBody;
}
export interface IReplaceOptions<IBody, IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    id: string;
    body: IBody;
}
export interface IDestroyOptions<IParams, IHeaders> extends IDefaultOptions<IParams, IHeaders> {
    id: string;
}
export interface IBlingRepository {
    readonly axiosInstance: AxiosInstance;
    index: <IIndexBody, IIndexResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IIndexOptions<IIndexBody, IParams, IHeaders>) => Promise<IIndexResponse>;
    show: <IShowResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IShowOptions<IParams, IHeaders>) => Promise<IShowResponse>;
    store: <IStoreBody, IStoreResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IStoreOptions<IStoreBody, IParams, IHeaders>) => Promise<IStoreResponse>;
    update: <IUpdateBody, IUpdateResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IUpdateOptions<IUpdateBody, IParams, IHeaders>) => Promise<IUpdateResponse>;
    replace: <IReplaceBody, IReplaceResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IReplaceOptions<IReplaceBody, IParams, IHeaders>) => Promise<IReplaceResponse>;
    destroy: <IDestroyResponse, IParams extends IDefaultParams = IDefaultParams, IHeaders extends IDefaultHeaders = IDefaultHeaders>(options: IDestroyOptions<IParams, IHeaders>) => Promise<IDestroyResponse>;
}
