import * as Elasticsearch from 'elasticsearch';

export default class ElasticMock implements Elasticsearch.Client {
    public constructor(params: Elasticsearch.ConfigOptions){}
    public cat: Elasticsearch.Cat = <any>{};
    public cluster: Elasticsearch.Cluster = <any>{};
    public indices: Elasticsearch.Indices = <any>{};
    public ingest: Elasticsearch.Ingest = <any>{};
    public nodes: Elasticsearch.Nodes = <any>{};
    public snapshot: Elasticsearch.Snapshot = <any>{};
    public tasks: Elasticsearch.Tasks = <any>{};
    public bulk(params: Elasticsearch.BulkIndexDocumentsParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public clearScroll(params: Elasticsearch.ClearScrollParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public count(params: Elasticsearch.CountParams, callback?: (error: any, response: Elasticsearch.CountResponse) => void): Promise<Elasticsearch.CountResponse> { return new Promise<Elasticsearch.CountResponse>(function(){}); };
    public create(params: Elasticsearch.CreateDocumentParams, callback?: (err: any, response: Elasticsearch.CreateDocumentResponse, status: any) => void): Promise<Elasticsearch.CreateDocumentResponse> { return new Promise<Elasticsearch.CreateDocumentResponse>(function(){}); };
    public delete(params: Elasticsearch.DeleteDocumentParams, callback?: (error: any, response: Elasticsearch.DeleteDocumentResponse) => void): Promise<Elasticsearch.DeleteDocumentResponse> { return new Promise<Elasticsearch.DeleteDocumentResponse>(function(){}); };
    public deleteByQuery(params: Elasticsearch.DeleteDocumentByQueryParams, callback?: (error: any, response: Elasticsearch.DeleteDocumentByQueryResponse) => void): Promise<Elasticsearch.DeleteDocumentByQueryResponse> { return new Promise<Elasticsearch.DeleteDocumentByQueryResponse>(function(){}); };
    public deleteScript(params: Elasticsearch.DeleteScriptParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public deleteTemplate(params: Elasticsearch.DeleteTemplateParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public exists(params: Elasticsearch.ExistsParams, callback?: (error: any, response: any, status?: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public explain(params: Elasticsearch.ExplainParams, callback?: (error: any, response: Elasticsearch.ExplainResponse) => void): Promise<Elasticsearch.ExplainResponse> { return new Promise<Elasticsearch.ExplainResponse>(function(){}); };
    public fieldStats(params: Elasticsearch.FieldStatsParams, callback?: (error: any, response: Elasticsearch.FieldStatsResponse) => void): Promise<Elasticsearch.FieldStatsResponse> { return new Promise<Elasticsearch.FieldStatsResponse>(function(){}); };
    public get<T>(params: Elasticsearch.GetParams, callback?: (error: any, response: Elasticsearch.GetResponse<T>) => void): Promise<Elasticsearch.GetResponse<T>> { return new Promise<Elasticsearch.GetResponse<T>>(function(){}); };
    public getScript(params: Elasticsearch.GetScriptParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public getSource(params: Elasticsearch.GetSourceParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public getTemplate(params: Elasticsearch.GetTemplateParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public index<T>(params: Elasticsearch.IndexDocumentParams<T>, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public info(params: Elasticsearch.InfoParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public mget<T>(params: Elasticsearch.MGetParams, callback?: (error: any, response: Elasticsearch.MGetResponse<T>) => void): Promise<Elasticsearch.MGetResponse<T>> { return new Promise<Elasticsearch.MGetResponse<T>>(function(){}); };
    public msearch<T>(params: Elasticsearch.MSearchParams, callback?: (error: any, response: Elasticsearch.MSearchResponse<T>) => void): Promise<Elasticsearch.MSearchResponse<T>> { return new Promise<Elasticsearch.MSearchResponse<T>>(function(){}); };
    public msearchTemplate<T>(params: Elasticsearch.MSearchTemplateParams, callback?: (error: any, response: Elasticsearch.MSearchResponse<T>) => void): Promise<Elasticsearch.MSearchResponse<T>> { return new Promise<Elasticsearch.MSearchResponse<T>>(function(){}); };
    public mtermvectors(params: Elasticsearch.MTermVectorsParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public ping(params: Elasticsearch.PingParams, callback?: (err: any, response: any, status: any) => void): Promise<any> {
            if(callback)
                callback(null, null, null);
            return new Promise<any>(function(){});
         };
    public putScript(params: Elasticsearch.PutScriptParams, callback?: (err: any, response: any, status: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public putTemplate(params: Elasticsearch.PutTemplateParams, callback?: (err: any, response: any, status: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public reindex(params: Elasticsearch.ReindexParams, callback?: (error: any, response: Elasticsearch.ReindexResponse) => void): Promise<Elasticsearch.ReindexResponse> { return new Promise<Elasticsearch.ReindexResponse>(function(){}); };
    public reindexRethrottle(params: Elasticsearch.ReindexRethrottleParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public renderSearchTemplate(params: Elasticsearch.RenderSearchTemplateParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public scroll<T>(params: Elasticsearch.ScrollParams, callback?: (error: any, response: Elasticsearch.SearchResponse<T>) => void): Promise<Elasticsearch.SearchResponse<T>> { return new Promise<Elasticsearch.SearchResponse<T>>(function(){}); };
    public search<T>(params: Elasticsearch.SearchParams, callback?: (error: any, response: Elasticsearch.SearchResponse<T>) => void): Promise<Elasticsearch.SearchResponse<T>> { return new Promise<Elasticsearch.SearchResponse<T>>(function(){}); };
    public searchShards(params: Elasticsearch.SearchShardsParams, callback?: (error: any, response: Elasticsearch.SearchShardsResponse) => void): Promise<Elasticsearch.SearchShardsResponse> { return new Promise<Elasticsearch.SearchShardsResponse>(function(){}); };
    public searchTemplate(params: Elasticsearch.SearchTemplateParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public suggest(params: Elasticsearch.SuggestParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public termvectors(params: Elasticsearch.TermvectorsParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public update(params: Elasticsearch.UpdateDocumentParams, callback?: (error: any, response: any) => void): Promise<any> { return new Promise<any>(function(){}); };
    public updateByQuery(params: Elasticsearch.UpdateDocumentByQueryParams, callback?: (error: any, response: Elasticsearch.UpdateDocumentByQueryResponse) => void): Promise<Elasticsearch.UpdateDocumentByQueryResponse> { return new Promise<Elasticsearch.UpdateDocumentByQueryResponse>(function(){}); };
    public close(): void {};
}