/* global document, window */

const axios = require('axios');

const Instance = () => {
  const apiUrl = process.env.NODE_ENV === 'production'
    ? 'https://portal-api.bcbsinstitute.com'
    : 'https://portal-api.dev.bcbsinstitute.com';
  window.localStorage.setItem('App', '8a266a40-ed2e-4be2-bdfc-459a507bf02e');

  let instance = axios.create({
    baseURL: apiUrl,
    timeout: 60000,
    headers: { App: window.localStorage.getItem('App') },
  });

  const setCookie = (cname, cvalue, date) => {
    const d = new Date(date * 1000);
    const expires = `expires=${d.toUTCString()}`;
    document.cookie = `${cname}=${cvalue};${expires};path=/`;
  };

  const getCookie = (cname) => {
    const name = `${cname}=`;
    const decodedCookie = decodeURIComponent(document.cookie);
    const ca = decodedCookie.split(';');
    for (let i = 0; i < ca.length; i += 1) {
      let c = ca[i];
      while (c.charAt(0) === ' ') {
        c = c.substring(1);
      }

      if (c.indexOf(name) === 0) {
        return c.substring(name.length, c.length);
      }
    }

    return '';
  };

  const setToken = (token) => {
    if (token && token !== null) {
      instance = axios.create({
        baseURL: apiUrl,
        timeout: 60000,
        headers: { App: window.localStorage.getItem('App'), Token: `Bearer ${token}` },
      });
    } else {
      instance = axios.create({
        baseURL: apiUrl,
        timeout: 60000,
        headers: { App: window.localStorage.getItem('App') },
      });
    }

    return instance;
  };

  const getConnection = () => {
    const token = getCookie('token');
    return setToken(token);
  };

  const getRawConn = () => {
    const token = getCookie('token');
    if (token && token !== null && token !== '') {
      return instance;
    }
    window.location.href = '/#/login';
    return null;
  };


  const token = getCookie('token');
  instance = setToken(token);

  return {
    getCookie,
    setCookie,
    getConnection,
    setToken,
    getRawConn,
  };
};

export default Instance();
