import { EnvironmentAlert } from '../../lib/vertical-farming/types'; interface AlertPanelProps { alerts: EnvironmentAlert[]; onAcknowledge?: (alert: EnvironmentAlert) => void; title?: string; } export default function AlertPanel({ alerts, onAcknowledge, title = 'Environment Alerts' }: AlertPanelProps) { const activeAlerts = alerts.filter(a => !a.acknowledged); const acknowledgedAlerts = alerts.filter(a => a.acknowledged); const alertStyles: Record = { low: { bg: 'bg-blue-50', border: 'border-blue-400', icon: 'arrow-down' }, high: { bg: 'bg-orange-50', border: 'border-orange-400', icon: 'arrow-up' }, critical_low: { bg: 'bg-red-50', border: 'border-red-500', icon: 'exclamation' }, critical_high: { bg: 'bg-red-50', border: 'border-red-500', icon: 'exclamation' }, sensor_fault: { bg: 'bg-gray-50', border: 'border-gray-500', icon: 'warning' }, }; const formatParameter = (param: string) => { const names: Record = { temperature: 'Temperature', humidity: 'Humidity', co2: 'CO2 Level', ec: 'EC (Nutrient)', ph: 'pH Level', ppfd: 'Light (PPFD)', }; return names[param] || param; }; if (alerts.length === 0) { return (

All systems operating within normal parameters

); } return (

{title}

a.type.includes('critical')) ? 'bg-red-100 text-red-800' : activeAlerts.length > 0 ? 'bg-yellow-100 text-yellow-800' : 'bg-green-100 text-green-800' }`}> {activeAlerts.length} Active
{activeAlerts.length > 0 && (
{activeAlerts.map((alert, idx) => { const style = alertStyles[alert.type] || alertStyles.low; return (
{alert.type.includes('critical') && '!! '} {formatParameter(alert.parameter)} {alert.type.includes('low') ? ' LOW' : ' HIGH'}

Current: {alert.value} {' | '} Threshold: {alert.threshold}

{new Date(alert.timestamp).toLocaleString()}

{onAcknowledge && ( )}
); })}
)} {acknowledgedAlerts.length > 0 && (
{acknowledgedAlerts.length} acknowledged alert(s)
{acknowledgedAlerts.map((alert, idx) => (

{formatParameter(alert.parameter)} {alert.type}: {alert.value} - {new Date(alert.timestamp).toLocaleTimeString()}

))}
)}
); }