import axios, { AxiosInstance, CreateAxiosDefaults } from "axios";
import axiosRateLimit, { rateLimitOptions } from "axios-rate-limit";
import axiosRetry from "axios-retry";
import { IAxiosRetryConfig } from "axios-retry";

export const HttpClientFactory = (options?: { 
    defaults?: CreateAxiosDefaults, 
    rateLimitOptions?: rateLimitOptions, 
    retryConfig?: IAxiosRetryConfig 
  }): AxiosInstance => {
  let httpClient = axios.create(options?.defaults);
    if(options?.rateLimitOptions) {
      httpClient = axiosRateLimit(httpClient, options.rateLimitOptions);
    }
    if(options?.retryConfig){
      axiosRetry(httpClient, options.retryConfig);
    }
    return httpClient;
  }