import { useState, useEffect } from 'react'; import { useRouter } from 'next/router'; import Link from 'next/link'; import Head from 'next/head'; import { FarmAnalytics, ResourceUsage, VerticalFarm } from '../../../lib/vertical-farming/types'; import ResourceUsageChart from '../../../components/vertical-farm/ResourceUsageChart'; export default function FarmAnalyticsPage() { const router = useRouter(); const { farmId } = router.query; const [farm, setFarm] = useState(null); const [analytics, setAnalytics] = useState(null); const [resourceUsage, setResourceUsage] = useState(null); const [loading, setLoading] = useState(true); const [period, setPeriod] = useState(30); useEffect(() => { if (farmId) { fetchData(); } }, [farmId, period]); const fetchData = async () => { setLoading(true); try { const [farmRes, analyticsRes] = await Promise.all([ fetch(`/api/vertical-farm/${farmId}`), fetch(`/api/vertical-farm/${farmId}/analytics?period=${period}`), ]); const farmData = await farmRes.json(); const analyticsData = await analyticsRes.json(); if (farmData.success) setFarm(farmData.farm); if (analyticsData.success) { setAnalytics(analyticsData.analytics); if (analyticsData.resourceUsage) { setResourceUsage(analyticsData.resourceUsage); } } } catch (error) { console.error('Error fetching analytics:', error); } finally { setLoading(false); } }; if (loading) { return (
); } return (
Analytics - {farm?.name || 'Vertical Farm'}
← Back

Farm Analytics

{[7, 30, 90].map(p => ( ))}
{analytics ? (
{/* Production Overview */}

Total Yield

{analytics.totalYieldKg} kg

{period} day period

Yield/m²/year

{analytics.yieldPerSqmPerYear} kg

Crop Cycles

{analytics.cropCyclesCompleted}

Avg {analytics.averageCyclesDays.toFixed(0)} days

Success Rate

{analytics.cropSuccessRate}%

{/* Quality Metrics */}

Quality Metrics

{analytics.averageQualityScore.toFixed(0)}

Quality Score

{analytics.gradeAPercent}%

Grade A

{analytics.wastagePercent}%

Wastage

{analytics.spaceUtilization}%

Space Utilization

{/* Financial Overview */}

Financial Performance

Revenue

${analytics.revenueUsd.toLocaleString()}

Costs

${analytics.costUsd.toLocaleString()}

Profit Margin

{analytics.profitMarginPercent}%

Revenue/m²/year

${analytics.revenuePerSqm.toLocaleString()}

{/* Environmental Impact */}

Environmental Impact

{analytics.carbonFootprintKgPerKg.toFixed(2)}

kg CO2 / kg produce

90% less than field farming

{analytics.waterUseLPerKg.toFixed(1)}

L water / kg produce

95% less than field farming

{analytics.energyUseKwhPerKg.toFixed(1)}

kWh / kg produce

{/* Top Crops */}

Top Crops by Yield

{analytics.topCropsByYield.map((crop, idx) => (
{idx + 1} {crop.crop} {crop.yieldKg} kg
))}

Top Crops by Revenue

{analytics.topCropsByRevenue.map((crop, idx) => (
{idx + 1} {crop.crop} ${crop.revenueUsd}
))}

Top Crops by Efficiency

{analytics.topCropsByEfficiency.map((crop, idx) => (
{idx + 1} {crop.crop} {crop.efficiencyScore}%
))}
{/* Resource Usage */} {resourceUsage && (

Resource Usage

)} {/* Generated Timestamp */}

Analytics generated: {new Date(analytics.generatedAt).toLocaleString()}

) : (

No analytics data available yet

Complete some crop batches to see analytics data

)}
); }