import axios from 'axios'; // Vite reemplazará import.meta.env.VITE_API_BASE_URL con el valor del .env // durante la compilación. Si no está definida, usará la URL de desarrollo. const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:5183/api'; const apiClient = axios.create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json', }, }); // Interceptor para añadir el token JWT a las peticiones (si existe) apiClient.interceptors.request.use( (config) => { const token = localStorage.getItem('authToken'); // O donde guardes el token if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => { return Promise.reject(error); } ); apiClient.interceptors.response.use( (response) => { // Cualquier código de estado que este dentro del rango de 2xx causa la ejecución de esta función return response; }, (error) => { // Cualquier código de estado que este fuera del rango de 2xx causa la ejecución de esta función if (axios.isAxiosError(error) && error.response) { if (error.response.status === 401) { // Token inválido o expirado console.warn("Error 401: Token inválido o expirado. Deslogueando..."); // Limpiar localStorage y recargar la página. // AuthContext se encargará de redirigir a /login al recargar porque no encontrará token. localStorage.removeItem('authToken'); localStorage.removeItem('authUser'); // Asegurar limpiar también el usuario // Forzar un hard refresh para que AuthContext se reinicialice y redirija // Esto también limpiará cualquier estado de React. // --- Mostrar mensaje antes de redirigir --- alert("Tu sesión ha expirado o no es válida. Serás redirigido a la página de inicio de sesión."); window.location.href = '/login'; // Redirección más directa } } // Es importante devolver el error para que el componente que hizo la llamada pueda manejarlo también si es necesario return Promise.reject(error); } ); // Puedes añadir interceptores de respuesta para manejar errores globales (ej: 401 Unauthorized) export default apiClient;