package com.eksad.masterdata.common;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class RequestUtil {
    /*key properties*/
    private static final String USERPWD = "admin:admin";
    private static final String HEADER_KEY = "Authorization";
    private static final String HEADER_VALUE = "Basic ";
    private static final String SPACE = " ";/*CAREFULL*/

    private static final String TOKEN = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.5BG9SEVOGo_xRhtT8IkyoSy60kPg8HM9Vpvb0TdNew4";
    private static final String PORTAL_TOKEN = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImI4Zjk4MzJhNGE0Y2Q1NzMzYzEzYWVkODFiNzM5MGE2M2Y0MTA0NmNiOWQyYzlmNzZiM2E3MWI3Zjg4NmRjOTEyZDA1MGVkZTAzNTNlYmQyIn0.eyJhdWQiOiIzIiwianRpIjoiYjhmOTgzMmE0YTRjZDU3MzNjMTNhZWQ4MWI3MzkwYTYzZjQxMDQ2Y2I5ZDJjOWY3NmIzYTcxYjdmODg2ZGM5MTJkMDUwZWRlMDM1M2ViZDIiLCJpYXQiOjE1NTcxOTYwNDMsIm5iZiI6MTU1NzE5NjA0MywiZXhwIjoxNTg4ODE4NDQzLCJzdWIiOiI3Iiwic2NvcGVzIjpbXX0.SPrfmDoZCJRi-EaizAqBxX8cJgiYgrGPeNJO3oXDj0W75TpgAzxGUdozipCXUryq-Tzviqf9XSk2Q7zg-OwxQ3bXAbe1gX_VuhRfRNj5lsIONEWy6F74LW6wZgdGrNveFMrSJp5WlJUKfZMFe9Xe1Y0d16F4BAz11PL2gbamUXBIjRofIHrTPQw0h31b3HxlyFfpPWDqgotRjOJ9JhRlyc1lR5aTeAWkbXHCD6l3v_MDIBk2TCsgQZWZUabb5xvr7_HEHa_G-QHPVP9AmXtkXxqln0bs69ODBr-3jK4PR231MBvxfd6JP0wd7b7EWayqJj-BFjG-Tmy1Gv2wp60FzJfCJY8-e3M3Y43E8G2635fmNaUmYytMvFzck5dmZsJY50661QKekzcKe6vs8WXivGHS3vGLdpnNPUcqUDuAt6mJe4AtITokHXL_kBGGNwIPxIxfLK3SrzfuY_0b3XJPjzf0_QDGTTH_4GKgBPfaesLsRfIpYfMl4jGjzM0qKHDtr2pJFZ8A_zMy1hl9lqCP2wnrTHPEWE1m0b6hLy3ShONklgXecdDyB5ZrzJzYuGfs1xxXXnJG1T5_iu_HYQfTQ0bWZi3KC_1zfSROgy3NkPMsd2hrhU2h9W8bhXy2PtQkrQMPTCtu6t4C07EjR65RAs3FWAaUnslOqK6Wh2P01Wc";
    private static final String PORTAL_H1_TOKEN = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImVhNWNhYTdjNzU1ZDUxMTVhODI5ODlkNDFjYTVmMDIyMDlmNzk1ZmM1NWRlNmVhZDRkZmQyOWEwNmQ5NmIyN2U1MjM3Yzc5NTQ5MDUxYTQzIn0.eyJhdWQiOiIzIiwianRpIjoiZWE1Y2FhN2M3NTVkNTExNWE4Mjk4OWQ0MWNhNWYwMjIwOWY3OTVmYzU1ZGU2ZWFkNGRmZDI5YTA2ZDk2YjI3ZTUyMzdjNzk1NDkwNTFhNDMiLCJpYXQiOjE1NTY2MTMyNDIsIm5iZiI6MTU1NjYxMzI0MiwiZXhwIjoxNTg4MjM1NjQyLCJzdWIiOiI3Iiwic2NvcGVzIjpbXX0.LIr_ZJmQpFhjWtsViSZDsWi_Vt4BSngKAtk0YT4lWr1iJBoH92Ele5UZNwmZxepN7ld7g9Fw2Og6nckvQgKXhrdHTHl7mfn4r4RgDs1gfW4wb3MgbTdKdiJMTL1U8Xgf8nOSks422XOwAHDF-dxOzX5XuWmKn5t_bEtgaFkbWu2wiztQi-P2AyKl8rpjeUl_7weDqcWYvSDCYp_zU6A7BMJECTK1S58tL5DyTekmV3Yp2zrjtVFoCFXzWF5nv8wSm3tBceC4Q2K4AZCYd1MIBZjzfV0Y0q_CqxrmYDxrP-5qHL4J2mRTUu7OgpgPQFeYEl_tIaY3XgzEMWFNspbT8OtDWlxGqfW4mPTIW5fq7fIM4YmY5O-Vl54IFdAgEjq5slSdb7tkPDcjx21rwqCcN75uMu-q2kqB79Rf5DLU82wRldPXoPIXBEpNv-56QqVQ-TW3jKuc0CyMoIxE-I42KS5YwKqP-IY1fB3qKLyeQauRP0l7JBKvCUfuKnJc7YdlZaFL3XB8PFyXFCcPg9NqCE_sclHqYqs4nJCdHvLKP02oHHrI043T94rTrcqvuSNGzidCzUneVLG-pWYWZdl8nQG2HbIz8l-6kBrIXGdJNhtRdaWTz2dImxI6adfgddv66s-D7L4jHTahx3tyu4hfSpymYa7NoUJ9I80x4AN4f90";

    public static HttpEntity<String> getPreFormattedRequestWithUserPassword() {
        return getPreFormattedRequestWithToken();
    }

    public static HttpEntity<String> getPreFormattedRequestWithUserPasswordForByteHandler() {
        return getPreFormattedRequestWithTokenForByteHandler();
    }

    public static HttpEntity<String> getFormDataRequestForMDIntegrationHandler() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
        httpHeaders.set("Accept", "application/json");
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPortalPreFormattedRequestWithToken() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, PORTAL_TOKEN);
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPortalPreFormattedRequestWithOrafinToken(String token) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, token);
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPreFormattedRequestForMDIntegrationHandler() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPreFormattedRequestWithToken() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, TOKEN);

        return new HttpEntity<>(httpHeaders);
    }

    private static HttpEntity<String> getPreFormattedRequestWithTokenForByteHandler() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add(HEADER_KEY, TOKEN);

        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPortalH1PreFormattedRequestWithToken() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, PORTAL_H1_TOKEN);
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPortalPreFormattedRequestWithRequestedToken(String token) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, token);
        return new HttpEntity<>(httpHeaders);
    }

    public static HttpEntity<String> getPreFormattedRequestWithToken(String header, String token) {
        HttpHeaders httpHeaders = new HttpHeaders();
//        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        httpHeaders.add(HEADER_KEY, header + " " + token);

        return new HttpEntity<>(httpHeaders);
    }

}