import type { RoomsResponse, ActivityEntry, AppConfig, TaskData } from './types' const BASE = '/room-planner/api' async function request(path: string, opts: RequestInit = {}): Promise { const res = await fetch(`${BASE}${path}`, { credentials: 'include', headers: { 'Content-Type': 'application/json', ...opts.headers }, ...opts, }) if (!res.ok) { const err = await res.json().catch(() => ({ error: res.statusText })) throw new Error(err.error || `Request failed: ${res.status}`) } return res.json() } export function fetchRooms(date: string): Promise { return request(`/rooms?date=${date}`) } export function completeTask(taskId: string, roomId: string, serviceDate: string, bookingRef?: string) { return request<{ ok: boolean; site_status: string | null }>('/tasks/complete', { method: 'POST', body: JSON.stringify({ task_id: taskId, room_id: roomId, service_date: serviceDate, booking_ref: bookingRef }), }) } export function uncompleteTask(taskId: string) { return request<{ ok: boolean }>('/tasks/uncomplete', { method: 'POST', body: JSON.stringify({ task_id: taskId }), }) } export function updateStatus(roomId: string, status: string, serviceDate: string, bookingRef?: string) { return request<{ ok: boolean }>('/status', { method: 'POST', body: JSON.stringify({ room_id: roomId, status, service_date: serviceDate, booking_ref: bookingRef }), }) } export function fetchConfig(): Promise { return request('/config') } export function updateConfig(key: string, value: unknown): Promise<{ ok: boolean }> { return request(`/config/${key}`, { method: 'PUT', body: JSON.stringify({ value }), }) } export function fetchTaskTypes(): Promise> { return request('/config/task-types') } export function fetchActivity(date: string): Promise { return request(`/activity?date=${date}`) } export function logActivity(entry: { room_id: string event_type: ActivityEntry['event_type'] event_data?: Record service_date?: string booking_ref?: string }): Promise<{ ok: boolean }> { return request('/activity', { method: 'POST', body: JSON.stringify(entry) }) } export function fetchEvents(since: string): Promise<{ pings: Array<{ id: number; booking_ids: string[]; event_types: string[]; detected_at: string }> server_time: string }> { return request(`/events?since=${encodeURIComponent(since)}`) }