import { apiGet, apiMultipart, apiPost } from './client' import type { DatasetCreateResponse, DatasetListResponse, RasterMetadataResponse, RasterInspectResponse, RasterStatsResponse, RasterPreviewResponse, JobRead, VectorBBoxResponse, VectorStatsResponse, VectorSummary, RasterNdviRequest, RasterNdwiRequest, RasterNdbiRequest, } from '../../types' export const datasetsApi = { list: (projectId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets`), upload: ( projectId: string, payload: { file: File datasetType: string source: string datasetRole: string sourceName?: string referenceLayerName?: string sourceMetadataJson?: string provenanceMetadataJson?: string areaId?: string }, ): Promise => { const form = new FormData() form.append('file', payload.file) form.append('dataset_type', payload.datasetType) form.append('source', payload.source) form.append('dataset_role', payload.datasetRole) if (payload.sourceName) { form.append('source_name', payload.sourceName) } if (payload.referenceLayerName) { form.append('reference_layer_name', payload.referenceLayerName) } if (payload.sourceMetadataJson) { form.append('source_metadata_json', payload.sourceMetadataJson) } if (payload.provenanceMetadataJson) { form.append('provenance_metadata_json', payload.provenanceMetadataJson) } if (payload.areaId) { form.append('area_id', payload.areaId) } return apiMultipart(`/api/v1/projects/${projectId}/datasets/upload`, form) }, refreshMetadata: (projectId: string, datasetId: string): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/metadata/refresh`, {}), inspectRaster: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/inspect`), rasterStats: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/stats`), inspectVector: (projectId: string, datasetId: string): Promise<{ dataset: DatasetCreateResponse; summary: VectorSummary | null; metadata: unknown }> => apiGet<{ dataset: DatasetCreateResponse; summary: VectorSummary | null; metadata: unknown }>( `/api/v1/projects/${projectId}/datasets/${datasetId}/vector/inspect`, ), vectorBbox: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/bbox`), vectorSummary: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/summary`), vectorStats: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/stats`), vectorClip: (projectId: string, datasetId: string, payload: { area_id: string; output_name?: string }) => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/clip`, payload), vectorBuffer: (projectId: string, datasetId: string, payload: { distance_m: number; dissolve?: boolean; output_name?: string }) => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/buffer`, payload), vectorIntersect: (projectId: string, datasetId: string, payload: { other_dataset_id: string; output_name?: string }) => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/intersect`, payload), rasterMetadata: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/metadata`), rasterInspect: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/inspect`), rasterTile: ( projectId: string, datasetId: string, payload: { tile_size?: number; overlap?: number; output_name?: string } = {}, ): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/tile`, payload), rasterReproject: ( projectId: string, datasetId: string, payload: { target_crs: string; resampling?: string; output_name?: string }, ): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/reproject`, payload), rasterNdvi: (projectId: string, datasetId: string, payload: RasterNdviRequest): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndvi`, payload), rasterNdwi: (projectId: string, datasetId: string, payload: RasterNdwiRequest): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndwi`, payload), rasterNdbi: (projectId: string, datasetId: string, payload: RasterNdbiRequest): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndbi`, payload), rasterPreview: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/preview`), rasterClip: ( projectId: string, datasetId: string, payload: { area_id: string; output_name?: string }, ): Promise => apiPost(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/clip`, payload), getContent: (projectId: string, datasetId: string): Promise => apiGet(`/api/v1/projects/${projectId}/datasets/${datasetId}/content`), }