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) {
      // Verificamos si la petición fallida NO fue al endpoint de login.
      const isLoginAttempt = error.config?.url?.endsWith('/auth/login');

      // Solo activamos el deslogueo automático si el error 401 NO es de un intento de login.
      if (error.response.status === 401 && !isLoginAttempt) {
        console.warn("Error 401 (Token inválido o expirado) detectado. Deslogueando...");
        
        localStorage.removeItem('authToken');
        localStorage.removeItem('authUser');
        
        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';
      }
    }
    // 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;