import { api } from '../config/api'; import type { GalleryInfo, GalleryData, GalleryStats } from '../types'; export const galleryService = { // Verify share token async verifyToken(slug: string, token: string): Promise<{ valid: boolean }> { const response = await api.get<{ valid: boolean }>(`/gallery/${slug}/verify-token/${token}`); return response.data; }, // Get basic gallery info (no auth required) async getGalleryInfo(slug: string, token?: string): Promise { const params = token ? { token } : {}; const response = await api.get(`/gallery/${slug}/info`, { params }); return response.data; }, // Get gallery photos (requires auth) async getGalleryPhotos(slug: string, filter?: 'liked' | 'favorited' | 'all', guestId?: string): Promise { const params: any = {}; if (filter && filter !== 'all' && guestId) { params.filter = filter; params.guest_id = guestId; } const response = await api.get(`/gallery/${slug}/photos`, { params }); return response.data; }, // Download single photo async downloadPhoto(slug: string, photoId: number, filename: string): Promise { const response = await api.get(`/gallery/${slug}/download/${photoId}`, { responseType: 'blob', }); // Create download link const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', filename); document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); }, // Download all photos as ZIP async downloadAllPhotos(slug: string): Promise { const response = await api.get(`/gallery/${slug}/download-all`, { responseType: 'blob', }); // Create download link const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', `${slug}.zip`); document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); }, // Get gallery statistics async getGalleryStats(slug: string): Promise { const response = await api.get(`/gallery/${slug}/stats`); return response.data; }, };