import axios from "axios";
import common from "../src/helpers/common";
import { applyAuthTokenInterceptor } from 'axios-jwt';

const axiosInstance = axios.create({
  baseURL: common.getBaseUrl(),
  withCredentials: true,
  headers: {
    // "Content-Type": "application/json",
    "Content-Encoding": "utf-8"
  },
});

// 2. Define token refresh function.
const requestRefresh = (refresh) => {
  // Notice that this is the global axios instance, not the axiosInstance!  <-- important
  return axios.post(`${common.getBaseUrl()}/auth/refresh_token`, { refresh })
    .then(response => response.data.access_token)
};

// 3. Apply interceptor
applyAuthTokenInterceptor(axiosInstance, { requestRefresh });  // Notice that this uses the axiosInstance instance.  <-- important

// 4. Logging in
const login = async (params) => {
  const response = await axiosInstance.post('/api/auth/signin', params)
  // save tokens to storage
  setAuthTokens({
    accessToken: response.data.access_token,
    refreshToken: response.data.refresh_token
  })
}

// 5. Logging out
const logout = () => clearAuthTokens()

// Now just make all requests using your axiosInstance instance
// axiosInstance.get('/api/data/locations').then(response => {
//   console.log(response.data) // <-- this will be the response from your API
// })

export default axiosInstance;
