import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts" import { Download, Clock } from "lucide-react" import { useBedPressureStore } from "@/stores/bedPressureStore" import { useEffect } from "react" const getValueColor = (value: number) => { if (value < 1500) return "#22c55e" // Green - Low value if (value < 2500) return "#eab308" // Yellow - Medium value if (value < 3500) return "#f97316" // Orange - High value return "#ef4444" // Red - Very high value } const getValueLevel = (value: number) => { if (value < 1500) return "Low" if (value < 2500) return "Medium" if (value < 3500) return "High" return "Critical" } export function SensorDetailModal() { const { isModalOpen, setIsModalOpen, selectedSensor, sensorData, selectedTimespan, setSelectedTimespan, fetchSensorHistory } = useBedPressureStore() const sensor = selectedSensor && sensorData[selectedSensor] ? sensorData[selectedSensor] : null // Fetch historical data when modal opens or timespan changes useEffect(() => { if (isModalOpen && selectedSensor && sensor?.source === 'hardware') { fetchSensorHistory(selectedSensor, selectedTimespan) } }, [isModalOpen, selectedSensor, selectedTimespan, fetchSensorHistory, sensor?.source]) const handleTimespanChange = (value: string) => { const newTimespan = parseInt(value) setSelectedTimespan(newTimespan) } const getTimespanLabel = (timespan: number) => { if (timespan < 60000) return `${timespan / 1000}s` if (timespan < 3600000) return `${timespan / 60000}m` if (timespan < 86400000) return `${timespan / 3600000}h` return `${timespan / 86400000}d` } if (!isModalOpen || !selectedSensor || !sensor) { return null } return (
Pressure Monitoring Details
Current Value
{sensor.currentValue.toFixed(0)}
ADC Units
Status Level
Body Zone
{sensor.zone}
Showing data for the last {getTimespanLabel(selectedTimespan)} {sensor.source === 'hardware' ? ' (Real sensor data)' : ' (Hardware offline - no data)'}
Max Value
{Math.max(...sensor.data.map(d => d.value)).toFixed(0)}
Min Value
{Math.min(...sensor.data.map(d => d.value)).toFixed(0)}
Average
{(sensor.data.reduce((sum, d) => sum + d.value, 0) / sensor.data.length).toFixed(0)}
Data Points
{sensor.data.length}