import axios from "axios";
import { queryClient } from "./query-client";

export const API_BASE = process.env.NEXT_PUBLIC_API_URL;

let isLoggingOut = false;

export const http = axios.create({
    baseURL: API_BASE,
    headers: {
        Accept: "application/json",
    },
});

http.interceptors.request.use((config) => {
    const token = localStorage.getItem("auth_token");

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

    if (config.data instanceof FormData) {
        delete config.headers["Content-Type"];
    }

    return config;
});

http.interceptors.response.use(
    (response) => response,
    (error) => {
        if (error.response?.status === 401 && !isLoggingOut) {
            isLoggingOut = true;

            localStorage.removeItem("auth_token");
            localStorage.removeItem("user_id");

            queryClient.clear();

            window.location.replace("/auth/sign-in");
        }

        return Promise.reject(error);
    }
);