import axios from 'axios';

// Récupérer l'URL de base de l'API depuis les variables d'environnement
const API_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000';

// Création de l'instance axios de base
export const base = axios.create({
  baseURL: API_URL
});

// Intercepteur pour ajouter le token d'authentification à chaque requête
base.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// Intercepteur pour gérer les erreurs de réponse
base.interceptors.response.use(
  (response) => response,
  (error) => {
    // Gérer les erreurs 401 (non authentifié)
    if (error.response && error.response.status === 401) {
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      // Rediriger vers la page de connexion si nécessaire
      // window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

// Fonctions d'aide pour les requêtes API
export const apiService = {
  get: <T>(endpoint: string, options = {}) =>
    base.get<T>(endpoint, options).then(response => response.data),

  post: <T>(endpoint: string, data: any, options = {}) =>
    base.post<T>(endpoint, data, options).then(response => response.data),

  put: <T>(endpoint: string, data: any, options = {}) =>
    base.put<T>(endpoint, data, options).then(response => response.data),

  patch: <T>(endpoint: string, data: any, options = {}) =>
    base.patch<T>(endpoint, data, options).then(response => response.data),

  delete: <T>(endpoint: string, options = {}) =>
    base.delete<T>(endpoint, options).then(response => response.data)
};
