export class ApiClient { private baseUrl: string; constructor(baseUrl: string) { this.baseUrl = baseUrl; } private async request(method: string, path: string, data?: object): Promise { const headers: HeadersInit = { 'Content-Type': 'application/json', }; const config: RequestInit = { method, headers, }; if (data) { config.body = JSON.stringify(data); } const response = await fetch(`${this.baseUrl}${path}`, config); if (!response.ok) { // Attempt to read error message from response body let errorData: any; try { errorData = await response.json(); } catch (e) { errorData = { message: response.statusText }; } throw new Error(errorData.message || `API request failed with status ${response.status}`); } const text = await response.text(); return text ? JSON.parse(text) : undefined; } get(path: string): Promise { return this.request('GET', path); } post(path: string, data: object): Promise { return this.request('POST', path, data); } put(path: string, data: object): Promise { return this.request('PUT', path, data); } delete(path: string): Promise { return this.request('DELETE', path); } patch(path: string, data: object): Promise { return this.request('PATCH', path, data); } } // Instantiate the API client with your backend's base URL // You might want to get this from an environment variable export const api = new ApiClient(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');