// import axios from 'axios';

// // Use the same environment variable name consistently
// const BASE_URL =   process.env.REACT_APP_API_BASE_URL;
// console.log('API Base URL:', BASE_URL);
// // Enhanced token service
// export const getToken = () => {
//   // Check multiple possible storage locations
//   return localStorage.getItem('token') || 
//          sessionStorage.getItem('token') || 
//          document.cookie.split('; ').find(row => row.startsWith('token='))?.split('=')[1];
// };

// const apiClient = axios.create({
//   baseURL: BASE_URL,
//   headers: {
//     'Content-Type': 'application/json',
//   },
// });

// // Enhanced request interceptor
// apiClient.interceptors.request.use(
//   (config) => {
//     const token = getToken();
//     if (token) {
//       config.headers['Authorization'] = `Bearer ${token}`;
//       // Add debug logging
//       console.debug('[API] Request with token:', {
//         url: config.url,
//         headers: config.headers
//       });
//     } else {
//       console.warn('[API] No token available for request:', config.url);
//     }
//     return config;
//   },
//   (error) => {
//     console.error('[API] Request interceptor error:', error);
//     return Promise.reject(error);
//   }
// );

// // Enhanced response interceptor
// apiClient.interceptors.response.use(
//   (response) => {
//     console.debug('[API] Successful response:', {
//       url: response.config.url,
//       status: response.status,
//       data: response.data
//     });
//     return response;
//   },
//   (error) => {
//     const originalRequest = error.config;
    
//     // Debug logging
//     console.error('[API] Error response:', {
//       url: originalRequest.url,
//       status: error.response?.status,
//       data: error.response?.data
//     });

//     // Handle 401 specifically
//     if (error.response?.status === 401 && !originalRequest._retry) {
//       originalRequest._retry = true;
//       console.warn('[API] Attempting token refresh...');
//       // Add your token refresh logic here if needed
//     }
    
//     return Promise.reject(error);
//   }
// );

// // API methods
// const apiService = {
//   get: (url, params, options = {}) => 
//     apiClient.get(url, { ...options, params }).catch(handleError),
  
//   post: (url, body = {}, options = {}) => 
//     apiClient.post(url, body, options).catch(handleError),
  
//   put: (url, body = {}, options = {}) => 
//     apiClient.put(url, body, options).catch(handleError),
  
//   delete: (url, options = {}) => 
//     apiClient.delete(url, options).catch(handleError),
  
//   // Add patch if needed
//   patch: (url, body = {}, options = {}) =>
//     apiClient.patch(url, body, options).catch(handleError)
// };

// // Enhanced error handler
// const handleError = (error) => {
//   // Your existing error handling logic
//   // ...
// };

// // Specific API endpoints
// export const getSubmenuItems = async (id) => {
//   try {
//     const response = await apiService.get(`/api1/submenu1/${id}`);
//     return response.data;
//   } catch (error) {
//     console.error('Error fetching submenu items:', error);
//     throw error; // Re-throw for component-level handling
//   }
// };

// // Export the configured service
// export default apiService;

import axios from 'axios';

const BASE_URL = process.env.REACT_APP_API_BASE_URL ;

const apiService = axios.create({
  baseURL: BASE_URL,
  timeout: 30000,
});

// Request interceptor for auth token
apiService.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('authToken');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// Response interceptor
apiService.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      localStorage.removeItem('authToken');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

// Add downloadFile method
apiService.downloadFile = async (url, data) => {
  try {
    const response = await apiService.post(url, data, {
      responseType: 'blob',
    });
    return response.data;
  } catch (error) {
    throw error;
  }
};

export default apiService;