import axios from 'axios' const API_BASE_URL = 'http://localhost:8001/api/v1' const api = axios.create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json', }, }) // Source Folders API export const sourceFolders = { list: async () => { const response = await api.get('/folders') return response.data }, add: async (path: string, recursive: boolean = true) => { const response = await api.post('/folders', { path, recursive, watch: false, // Can be made configurable later }) return response.data }, scan: async (folderId: string) => { const response = await api.post(`/folders/${folderId}/scan`) return response.data }, delete: async (folderId: string) => { const response = await api.delete(`/folders/${folderId}`) return response.data }, } // Photos API export const photos = { list: async (params?: { limit?: number offset?: number folder_id?: string heap_id?: string rating?: number flag?: string }) => { const response = await api.get('/photos', { params }) return response.data }, get: async (photoId: string) => { const response = await api.get(`/photos/${photoId}`) return response.data }, update: async (photoId: string, data: { rating?: number flag?: string user_title?: string user_notes?: string }) => { const response = await api.patch(`/photos/${photoId}`, data) return response.data }, bulkUpdate: async (photoIds: string[], data: { rating?: number flag?: string heap_id?: string trash?: boolean }) => { const response = await api.post('/photos/bulk', { photo_ids: photoIds, ...data, }) return response.data }, getThumbnailUrl: (photoId: string, size: 'small' | 'medium' | 'large' = 'medium') => { return `${API_BASE_URL}/photos/${photoId}/thumb/${size}` }, getOriginalUrl: (photoId: string) => { return `${API_BASE_URL}/photos/${photoId}/original` }, } // Library API export const library = { scan: async () => { const response = await api.post('/library/scan') return response.data }, scanStatus: async () => { const response = await api.get('/library/scan/status') return response.data }, stats: async () => { const response = await api.get('/library/stats') return response.data }, } // Heaps API export const heaps = { list: async () => { const response = await api.get('/heaps') return response.data }, create: async (name: string, description?: string) => { const response = await api.post('/heaps', { name, description, }) return response.data }, update: async (heapId: string, data: { name?: string description?: string }) => { const response = await api.patch(`/heaps/${heapId}`, data) return response.data }, delete: async (heapId: string) => { const response = await api.delete(`/heaps/${heapId}`) return response.data }, } // Tags API export const tags = { list: async () => { const response = await api.get('/tags') return response.data }, create: async (name: string, color?: string) => { const response = await api.post('/tags', { name, color, }) return response.data }, update: async (tagId: string, data: { name?: string color?: string }) => { const response = await api.patch(`/tags/${tagId}`, data) return response.data }, delete: async (tagId: string) => { const response = await api.delete(`/tags/${tagId}`) return response.data }, } // Trash API export const trash = { list: async () => { const response = await api.get('/trash') return response.data }, restore: async (photoIds: string[]) => { const response = await api.post('/trash/restore', { photo_ids: photoIds, }) return response.data }, empty: async () => { const response = await api.delete('/trash/empty') return response.data }, } export default api