import axios from "axios";
import CONFIG from "./сonfig.js";
import {notification} from "antd";

const createApi = (logoutAndRedirect) => {
    const api = axios.create({
        baseURL: CONFIG.BASE_URL,
    });

    api.interceptors.request.use(config => {
        const token = localStorage.getItem('access_token');

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

        return config;
    });

    api.interceptors.response.use(
        (response) => response,
        (error) => {
            if (error.response) {
                const {status} = error.response;

                if (status === 401 || status === 403) {
                    notification.error({
                        message: "Ошибка авторизации",
                        description: "Пользователь не найден или токен недействителен",
                    });

                    logoutAndRedirect();
                } else {
                    notification.error({
                        message: "Ошибка API",
                        description: error.response.data.message || "Что-то пошло не так",
                    });
                }
            } else if (error.request) {
                notification.error({
                    message: "Ошибка соединения",
                    description: "Сервер не отвечает. Проверьте соединение с сетью.",
                });
            } else {
                notification.error({
                    message: "Неизвестная ошибка",
                    description: "Проверьте соединение с сетью.",
                });
            }

            return Promise.reject(error);
        }
    );

    return api;
};

export default createApi;
