import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { AlertTriangle, VolumeX, Clock, CheckCircle } from "lucide-react" import { useBedPressureStore } from "@/stores/bedPressureStore" import { useEffect } from "react" export function AlertsPanel() { const { alerts, activeAlarms, alarmManager, acknowledgeAlarm, silenceAlarm, silenceAllAlarms } = useBedPressureStore() // Update active alarms periodically useEffect(() => { const interval = setInterval(() => { // The store will handle updating alarms automatically }, 1000) return () => clearInterval(interval) }, [alarmManager]) const handleAcknowledge = (alarmId: string) => { acknowledgeAlarm(alarmId) } const handleSilence = (alarmId: string) => { silenceAlarm(alarmId, 300000) // Silence for 5 minutes } const handleSilenceAll = () => { silenceAllAlarms(300000) // Silence all for 5 minutes } const getAlarmIcon = (type: 'warning' | 'alarm') => { return type === 'alarm' ? ( ) : ( ) } const getAlarmBgColor = (type: 'warning' | 'alarm', silenced: boolean) => { if (silenced) return "bg-gray-100 border-gray-300" return type === 'alarm' ? "bg-red-50 border-red-200" : "bg-yellow-50 border-yellow-200" } // Filter out warnings when there's an alarm with the same sensor name const filteredAlarms = activeAlarms.filter(alarm => { if (alarm.type === 'alarm') return true // For warnings, only keep if there's no alarm with the same sensor name return !activeAlarms.some(other => other.type === 'alarm' && other.sensorLabel === alarm.sensorLabel ) }) const hasActiveAlarms = filteredAlarms.some(alarm => !alarm.silenced) return (
Active Alarms ({filteredAlarms.length}) {activeAlarms.length > 0 && ( )}
{filteredAlarms.length === 0 ? (

No active alarms

System monitoring normally

) : ( filteredAlarms.map((alarm) => (
{getAlarmIcon(alarm.type)}

{alarm.sensorLabel}

{alarm.type.toUpperCase()} {alarm.silenced && ( SILENCED )}

Value: {alarm.value.toFixed(0)} (Threshold: {alarm.threshold})

{alarm.time} {alarm.acknowledged && ( ACK )} {alarm.silenced && alarm.silencedUntil && ( Until {new Date(alarm.silencedUntil).toLocaleTimeString()} )}
{!alarm.acknowledged && ( )} {!alarm.silenced && ( )}
)) )}
{/* Legacy Alerts Section */} {alerts.length > 0 && (

Recent Alerts

{alerts.slice(0, 3).map((alert) => (

{alert.message}

{alert.time}

))}
)}
) }