import { Box, CircularProgress, Alert, Paper, Typography } from '@mui/material'; import { PiCow } from "react-icons/pi"; // Un icono divertido para "cabezas" import ScaleIcon from '@mui/icons-material/Scale'; // Para kilos import type { CotizacionGanado } from '../models/mercadoModels'; import { useApiData } from '../hooks/useApiData'; import { formatCurrency, formatInteger } from '../utils/formatters'; const AgroCard = ({ categoria }: { categoria: CotizacionGanado }) => { return ( {categoria.categoria} Precio Máximo: ${formatCurrency(categoria.maximo)} Precio Mínimo: ${formatCurrency(categoria.minimo)} Precio Mediano: ${formatCurrency(categoria.mediano)} {formatInteger(categoria.cabezas)} Cabezas {formatInteger(categoria.kilosTotales)} Kilos ); }; // Este widget agrupa los datos por categoría para un resumen más limpio. export const MercadoAgroCardWidget = () => { const { data, loading, error } = useApiData('/mercados/agroganadero'); if (loading) { return ; } if (error) { return {error}; } if (!data || data.length === 0) { return No hay datos del mercado agroganadero disponibles.; } // Agrupamos y sumamos los datos por categoría principal const resumenPorCategoria = data.reduce((acc, item) => { if (!acc[item.categoria]) { acc[item.categoria] = { ...item }; } else { acc[item.categoria].cabezas += item.cabezas; acc[item.categoria].kilosTotales += item.kilosTotales; acc[item.categoria].importeTotal += item.importeTotal; acc[item.categoria].maximo = Math.max(acc[item.categoria].maximo, item.maximo); acc[item.categoria].minimo = Math.min(acc[item.categoria].minimo, item.minimo); } return acc; }, {} as Record); return ( {Object.values(resumenPorCategoria).map(categoria => ( ))} ); };