import React from 'react'; function Analytics({ activities, goals }) { // Calculate various analytics const calculateAnalytics = () => { if (activities.length === 0) return null; const now = new Date(); const thirtyDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000); const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); // Filter activities by time period const last30Days = activities.filter(activity => new Date(activity.timestamp || Date.now()) >= thirtyDaysAgo ); const last7Days = activities.filter(activity => new Date(activity.timestamp || Date.now()) >= sevenDaysAgo ); // Calculate totals by category const categoryTotals = activities.reduce((acc, activity) => { acc[activity.type] = (acc[activity.type] || 0) + activity.co2; return acc; }, {}); // Calculate monthly trend const monthlyData = []; for (let i = 29; i >= 0; i--) { const date = new Date(now.getTime() - i * 24 * 60 * 60 * 1000); const dayActivities = activities.filter(activity => { const activityDate = new Date(activity.timestamp || Date.now()); return activityDate.toDateString() === date.toDateString(); }); const dayTotal = dayActivities.reduce((sum, activity) => sum + activity.co2, 0); monthlyData.push({ date: date.getDate(), co2: dayTotal, day: date.toLocaleDateString('en-US', { weekday: 'short' }) }); } // Calculate averages const dailyAverage = last30Days.reduce((sum, activity) => sum + activity.co2, 0) / 30; const weeklyAverage = last7Days.reduce((sum, activity) => sum + activity.co2, 0) / 7; // Calculate improvement const firstHalf = last30Days.slice(0, 15).reduce((sum, activity) => sum + activity.co2, 0) / 15; const secondHalf = last30Days.slice(15).reduce((sum, activity) => sum + activity.co2, 0) / 15; const improvement = ((firstHalf - secondHalf) / firstHalf) * 100; return { categoryTotals, monthlyData, dailyAverage, weeklyAverage, improvement, totalActivities: activities.length, totalCO2: activities.reduce((sum, activity) => sum + activity.co2, 0), last30DaysCO2: last30Days.reduce((sum, activity) => sum + activity.co2, 0), last7DaysCO2: last7Days.reduce((sum, activity) => sum + activity.co2, 0) }; }; const analytics = calculateAnalytics(); if (!analytics) { return (
Start tracking activities to see your analytics!