import axios from 'axios';

const API = process.env.NEXT_PUBLIC_API_URL;

if (!API) {
  throw new Error('ERROR is not defined');
}

const axiosInstance = axios.create({
  baseURL: API, // Replace with your API base URL
  timeout: 100000, // Request timeout in milliseconds
  headers: {
    'Content-Type': 'application/json',
  },
});

// Request interceptor para agregar el token de autenticación
axiosInstance.interceptors.request.use(
  (config) => {
    // Obtener el token del sessionStorage
    const token = sessionStorage.getItem('token');

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

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

// Response interceptor para manejar errores de autenticación
axiosInstance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    // Si el token ha expirado o es inválido (401)
    if (error.response?.status === 401) {
      // Limpiar el sessionStorage
      sessionStorage.removeItem('token');
      sessionStorage.removeItem('user');

      // Redireccionar al login solo si no estamos ya en la página de login
      if (
        typeof window !== 'undefined' &&
        !window.location.pathname.includes('/login')
      ) {
        window.location.href = '/login';
      }
    }

    return Promise.reject(error);
  }
);

export default axiosInstance;
