// Analytics service for API interactions import { apiClient } from './api'; import type { AnalyticsSummary, TimeSeriesDataPoint, LitterTypeDistribution, QuantityAggregation } from '@/types'; class AnalyticsService { /** * Get summary statistics for the analytics dashboard */ async getSummary(dateRange?: { start: string; end: string }): Promise { const params = new URLSearchParams(); if (dateRange) { params.append('startDate', dateRange.start); params.append('endDate', dateRange.end); } const queryString = params.toString(); return apiClient.get(`/analytics/summary${queryString ? `?${queryString}` : ''}`); } /** * Get time series data for report trends */ async getTimeSeries(dateRange?: { start: string; end: string }): Promise { const params = new URLSearchParams(); if (dateRange) { params.append('startDate', dateRange.start); params.append('endDate', dateRange.end); } const queryString = params.toString(); return apiClient.get(`/analytics/trends${queryString ? `?${queryString}` : ''}`); } /** * Get litter type distribution data */ async getLitterTypeDistribution(dateRange?: { start: string; end: string }): Promise { const params = new URLSearchParams(); if (dateRange) { params.append('startDate', dateRange.start); params.append('endDate', dateRange.end); } const queryString = params.toString(); return apiClient.get(`/analytics/litter-types${queryString ? `?${queryString}` : ''}`); } /** * Get quantity estimation aggregation data */ async getQuantityAggregation(dateRange?: { start: string; end: string }): Promise { const params = new URLSearchParams(); if (dateRange) { params.append('startDate', dateRange.start); params.append('endDate', dateRange.end); } const queryString = params.toString(); return apiClient.get(`/analytics/quantities${queryString ? `?${queryString}` : ''}`); } /** * Export analytics data to CSV */ async exportToCSV(dateRange?: { start: string; end: string }): Promise { const params = new URLSearchParams(); if (dateRange) { params.append('startDate', dateRange.start); params.append('endDate', dateRange.end); } const queryString = params.toString(); const response = await fetch( `${import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000/api'}/analytics/export${queryString ? `?${queryString}` : ''}`, { method: 'GET', headers: { 'Accept': 'text/csv', }, } ); if (!response.ok) { throw new Error('Failed to export data'); } return response.blob(); } } export const analyticsService = new AnalyticsService();