import axios from "axios";
import { getClientAccessToken } from "./getClientAccessToken";
import { logoutUser } from "@/lib/logoutUser";
const instance = axios.create({
  baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,
  headers: {
    "Content-Type": "application/json",
  },
});

instance.interceptors.request.use(
  async (config) => {
    // Never call the server-side token helper here: it is a Server Action,
    // and every Server Action response refreshes the current route, so an
    // interceptor that awaited one put the app in a reload loop.
    const token = await getClientAccessToken();

    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

instance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    const status = error.response?.status;

    if (status === 401) {
      logoutUser();
    }
    return Promise.reject(error);
  }
);

export default instance;
