import axios, { AxiosInstance } from 'axios';
import Cookies from 'js-cookie';
import { signOut } from "next-auth/react";

const API_URL = process.env.NEXT_PUBLIC_API_URL;

if (!API_URL) {
    throw new Error("NEXT_PUBLIC_API_URL is not defined in .env file");
}

const axiosInstance: AxiosInstance = axios.create({
    baseURL: API_URL,
    headers: {
        'Content-Type': 'application/json',
    },
});

axiosInstance.interceptors.request.use(
    (config) => {
        const accessToken = Cookies.get('access_token');
        if (accessToken) {
            config.headers.Authorization = `Bearer ${accessToken}`;
        }
        return config;
    },
    (error) => Promise.reject(error)
);

axiosInstance.interceptors.response.use(
    (response) => response,
    (error) => {
        if (error.response?.status === 401 && typeof window !== 'undefined') {
            const returnUrl = encodeURIComponent(window.location.pathname + window.location.search);
            signOut({ redirect: false }).then(() => {
                window.location.href = `/auth/login?redirect=${returnUrl}`;
            });
            return new Promise(() => { });
        }
        return Promise.reject(error);
    }
);

export { axiosInstance };
