import type { MonitoringData, TargetSummary, TargetVehicle, TrendPoint } from './types'; const BASE = '/api/mileage'; async function fetchJson(url: string): Promise { const res = await fetch(url); if (!res.ok) throw new Error(`API error: ${res.status} ${res.statusText}`); return res.json(); } export async function fetchMonitoring(params?: { sortBy?: string; sortOrder?: string; limit?: number; page?: number; search?: string; dept?: string; customer?: string; project?: string; entity?: string; plate?: string; mileageMin?: string; mileageMax?: string; }): Promise { const query = new URLSearchParams(); if (params?.sortBy) query.set('sortBy', params.sortBy); if (params?.sortOrder) query.set('sortOrder', params.sortOrder); if (params?.limit) query.set('limit', String(params.limit)); if (params?.page) query.set('page', String(params.page)); if (params?.search) query.set('search', params.search); if (params?.dept) query.set('dept', params.dept); if (params?.customer) query.set('customer', params.customer); if (params?.project) query.set('project', params.project); if (params?.entity) query.set('entity', params.entity); if (params?.plate) query.set('plate', params.plate); if (params?.mileageMin) query.set('mileageMin', params.mileageMin); if (params?.mileageMax) query.set('mileageMax', params.mileageMax); const qs = query.toString(); return fetchJson(`${BASE}/monitoring${qs ? `?${qs}` : ''}`); } export async function fetchTargets(): Promise { return fetchJson(`${BASE}/targets`); } export async function fetchTargetVehicles(targetId: number): Promise { return fetchJson(`${BASE}/target/${targetId}/vehicles`); } export async function fetchTrend(targetId?: number, days = 7): Promise { const params = new URLSearchParams(); if (targetId) params.set('targetId', String(targetId)); params.set('days', String(days)); return fetchJson(`${BASE}/trend?${params.toString()}`); }