const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || "http://localhost:8080/api"; async function request(path, options = {}) { const response = await fetch(`${API_BASE_URL}${path}`, { headers: { "Content-Type": "application/json", ...(options.headers || {}), }, ...options, }); if (!response.ok) { let message = `Request failed with status ${response.status}`; try { const data = await response.json(); message = data.message || message; } catch { try { const text = await response.text(); if (text) { message = text; } } catch { // ignore } } throw new Error(message); } if (response.status === 204) { return null; } return response.json(); } export function getHealth() { return request("/health"); } export function getDashboardStats() { return request("/dashboard"); } export function getUsers() { return request("/users"); } export function getApprovers() { return request("/approvers"); } export function getEquipment() { return request("/equipment"); } export function getRooms() { return request("/rooms"); } export function searchRooms(payload) { return request("/rooms/search", { method: "POST", body: JSON.stringify(payload), }); } export function createReservation(payload) { return request("/reservations", { method: "POST", body: JSON.stringify(payload), }); } export function loginUser(payload) { return request("/auth/login", { method: "POST", body: JSON.stringify(payload), }); } export function registerUser(payload) { return request("/auth/register", { method: "POST", body: JSON.stringify(payload), }); } export function getReservation(id) { return request(`/reservations/${id}`); } export function getPendingReservations() { return request("/reservations/pending"); } export function approveReservation(payload) { return request("/approvals", { method: "POST", body: JSON.stringify(payload), }); } export function getRoomUtilizationReport() { return request("/reports/room-utilization"); } export function getEquipmentDemandReport() { return request("/reports/equipment-demand"); }