import axios, { AxiosRequestHeaders } from 'axios';
import FormData                       from 'form-data';
import ClientsSharedConfig            from '../sharedByClients/config/ClientsSharedConfig';


class HttpManager {
    public handleCommandErrors: boolean = true;

    registerAxiosInterceptor() {
        this.registerRequestInterceptor();
        this.registerResponseInterceptor();
    }

    private registerRequestInterceptor() {
        axios.interceptors.request.use((config) => {
            if ( config.data instanceof FormData ) {
                config.headers = { ...config.headers, ...(config.data as FormData).getHeaders() } as AxiosRequestHeaders;
            }

            if ( config.url && (config.url.indexOf(ClientsSharedConfig.apiURL) !== -1) ) {
                if ( config.data && Object.keys(config.data).length > 0 ) {
                    config.headers['Content-Type'] = 'multipart/form-data';
                }
            }

            return config;
        });
    }

    private registerResponseInterceptor() {
        axios.interceptors.response.use((response) => {
            return response;
        }, (error) => {
            return Promise.reject(error);
        });
    }
}


export default new HttpManager();