import { useState, useEffect } from 'react'; import './StatsPanel.css'; const StatsPanel = ({ selectedTurtle, apiUrl }) => { const [miningStats, setMiningStats] = useState([]); const [topMiners, setTopMiners] = useState([]); const [timeFilter, setTimeFilter] = useState(7); // days const [loading, setLoading] = useState(false); useEffect(() => { loadMiningStats(); loadTopMiners(); // Refresh stats every 30 seconds const interval = setInterval(() => { loadMiningStats(); loadTopMiners(); }, 30000); return () => clearInterval(interval); }, [selectedTurtle, timeFilter]); const loadMiningStats = async () => { setLoading(true); try { const url = selectedTurtle ? `${apiUrl}/api/stats/mining/${selectedTurtle.turtleID}?days=${timeFilter}` : `${apiUrl}/api/stats/mining?days=${timeFilter}`; const response = await fetch(url); if (response.ok) { const data = await response.json(); setMiningStats(Array.isArray(data) ? data : [data]); } } catch (error) { console.error('Failed to load mining stats:', error); } finally { setLoading(false); } }; const loadTopMiners = async () => { try { const response = await fetch(`${apiUrl}/api/stats/top-miners?limit=10`); if (response.ok) { const data = await response.json(); setTopMiners(data); } } catch (error) { console.error('Failed to load top miners:', error); } }; const getTotalBlocks = (stats) => { if (!stats || !stats.blocks) return 0; return stats.blocks.reduce((sum, block) => sum + block.count, 0); }; const getBlockEmoji = (blockType) => { if (!blockType) return '📦'; const lower = blockType.toLowerCase(); if (lower.includes('diamond')) return '💎'; if (lower.includes('gold')) return '🟡'; if (lower.includes('iron')) return '⚪'; if (lower.includes('coal')) return '⚫'; if (lower.includes('emerald')) return '🟢'; if (lower.includes('redstone')) return '🔴'; if (lower.includes('lapis')) return '🔵'; if (lower.includes('copper')) return '🟠'; if (lower.includes('stone')) return '🗿'; if (lower.includes('dirt')) return '🟤'; if (lower.includes('cobble')) return '🪨'; if (lower.includes('wood') || lower.includes('log')) return '🪵'; return '📦'; }; const formatBlockType = (blockType) => { if (!blockType) return 'Unknown'; return blockType.replace('minecraft:', '').replace(/_/g, ' ') .split(' ') .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); }; return (