import React from 'react'; import type { LatestAvg } from '../../types/api.ts'; import { formatDateId, formatNumber } from '../../utils/format.ts'; import { adgStatus, formatWeight, getTargetWeightForAge, type WeightStatus, uniformityStatus, weightDeviationStatus, } from '../../utils/weight.ts'; const statusText: Record = { ok: 'text-green-600', warning: 'text-yellow-600', critical: 'text-red-600', }; const StatItem: React.FC<{ icon: React.ReactNode; label: string; value: string; status: WeightStatus; }> = ({ icon, label, value, status }) => (
{icon}

{label}

{value}

); interface WeightStatsProps { latest: LatestAvg | null; docWeight: number; } const WeightStats: React.FC = ({ latest, docWeight }) => { const target = latest ? getTargetWeightForAge(latest.age, docWeight) : null; return (

Statistik Utama Pertumbuhan

{latest?.date ? (

Data per: {formatDateId(latest.date)}

) : null}
{!latest ? (

Data Tidak Tersedia

Belum ada data timbangan untuk siklus ini. Data akan muncul setelah ayam ditimbang.

) : (
} label="Rata-rata Berat Ayam" value={formatWeight(latest.average_weight, { stripTrailingZeros: true })} status={weightDeviationStatus(latest.average_weight, target)} /> } label="Pertambahan Bobot Harian (ADG)" value={formatWeight(latest.average_daily_gain, { suffix: '/hari', decimals: 2, truncate: true, })} status={adgStatus(latest.average_daily_gain)} /> } label="Tingkat Keseragaman (Uniformity)" value={`${formatNumber(latest.uniformity, 2, 2, true)} %`} status={uniformityStatus(latest.uniformity)} />
)}
); }; export default WeightStats;