import axios from 'axios'; import { RegisterData, UserData, ProductData, OrderData, AuthResponse } from '../types'; const api = axios.create({ baseURL: '/api', headers: { 'Content-Type': 'application/json', }, }); // Add token to requests if available api.interceptors.request.use( (config) => { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => Promise.reject(error) ); // Handle response errors api.interceptors.response.use( (response) => response, (error) => { if (error.response?.status === 401) { // Token expired or invalid localStorage.removeItem('token'); localStorage.removeItem('user'); window.location.href = '/login'; } return Promise.reject(error); } ); export function useApi() { return { // Auth login: async (email: string, password: string): Promise => { const response = await api.post('/auth/login', { email, password, }); return response.data; }, register: async (userData: RegisterData): Promise => { const response = await api.post('/auth/register', userData); return response.data; }, getCurrentUser: async (): Promise => { const response = await api.get('/users/me'); return response.data; }, // Products getProducts: async (): Promise => { const response = await api.get('/products'); return response.data; }, getProduct: async (id: string): Promise => { const response = await api.get(`/products/${id}`); return response.data; }, createProduct: async (productData: Omit): Promise => { const response = await api.post('/products', productData); return response.data; }, updateProduct: async (id: string, productData: Partial): Promise => { const response = await api.put(`/products/${id}`, productData); return response.data; }, deleteProduct: async (id: string): Promise => { await api.delete(`/products/${id}`); }, // Orders getOrders: async (): Promise => { const response = await api.get('/orders'); return response.data; }, getOrder: async (id: string): Promise => { const response = await api.get(`/orders/${id}`); return response.data; }, createOrder: async (orderData: Omit): Promise => { const response = await api.post('/orders', orderData); return response.data; }, }; }