import { apiClient } from './api-client'; export interface OsmCoverageRow { layer: string; category: string | null; total: number; withGeometry?: number; promoted?: number; raw?: number; lastSyncedAt: string | null; } export interface OsmCoverageSummary { rows: OsmCoverageRow[]; totals: { administrativeUnits: number; poiTotal: number; industrialParks: number; transportStations: number; transportLines: number; }; } export interface OsmSyncRun { id: string; layer: string; category: string | null; chunk: string | null; startedAt: string; finishedAt: string | null; status: 'RUNNING' | 'SUCCESS' | 'PARTIAL' | 'FAILED'; rowsAdded: number; rowsUpdated: number; rowsSkipped: number; rowsLocked: number; errorMessage: string | null; } export interface OsmSyncLayer { layer: string; category?: string; weight: 'light' | 'medium' | 'heavy'; } export const osmSyncApi = { layers: () => apiClient.get('/admin/osm/layers'), coverage: () => apiClient.get('/admin/osm/coverage'), runs: (params: { layer?: string; status?: string; limit?: number } = {}) => { const q = new URLSearchParams(); Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== '') q.append(k, String(v)); }); const qs = q.toString(); return apiClient.get(`/admin/osm/runs${qs ? `?${qs}` : ''}`); }, trigger: (body: { layer: string; category?: string; chunk?: string }) => apiClient.post<{ runId: string; status: string }>('/admin/osm/runs', body), };